最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

輕松掌握java責任鏈模式

 更新時間:2016年09月29日 15:39:32   作者:斷了聯(lián)系  
這篇文章主要幫助大家輕松掌握java責任鏈模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

定義:責任鏈模式(Chain of Responsibility Pattern)為請求創(chuàng)建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發(fā)送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。

特點:1、降低耦合度。它將請求的發(fā)送者和接收者解耦。

             2、簡化了對象。使得對象不需要知道鏈的結構。

             3、增強給對象指派職責的靈活性。通過改變鏈內(nèi)的成員或者調(diào)動它們的次序,允許動態(tài)地新增或者刪除責任。

             4、增加新的請求處理類很方便。

企業(yè)級開發(fā)和常用框架中的應用:spring,struts的攔截器,servlet的過濾器

具體實例:

/**
 *這里以公司請假舉例:
 *1、某人請假(事件)
 *2、項目組長審批:小于三天可以審批,大于三天請示上級
 *3、部門主管審批:小于十天可以審批,大于十天請示上級
 *4、總經(jīng)理審批 :小于30天可以審批,大于30天不批準
 */
public class Demo {

 public static void main(String[] args) {
 Event event = new Event("程序員", 32, "回老家探親");
 Leader a = new GroupLeader("張三");
 Leader b = new Manager("李四");
 Leader c = new GeneralManager("王五");
 
 //指定責任鏈模式
 a.setNextLeader(b);
 b.setNextLeader(c);
 
 a.handler(event);
 }
}

/**
 * 事件對象,責任鏈中的具體處理事件
 * 該實例中即為請假這件事兒
 */
class Event{
 private String name;
 private int days;
 private String reason;
 public Event(String name, int days, String reason) {
 super();
 this.name = name;
 this.days = days;
 this.reason = reason;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public int getDays() {
 return days;
 }
 public void setDays(int days) {
 this.days = days;
 }
 public String getReason() {
 return reason;
 }
 public void setReason(String reason) {
 this.reason = reason;
 }
}

/**
 * 抽象責任鏈對象,后面的所有實際責任鏈對象繼承自該對象 
 */
abstract class Leader{
 private String name;
 protected Leader nextLeader;//責任鏈中的下一個責任對象,這是讓責任鏈持續(xù)下去的基礎
 public Leader(String name) {
 super();
 this.name = name;
 }
 public void setNextLeader(Leader nextLeader) {
 this.nextLeader = nextLeader;
 }
 
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 protected abstract void handler(Event event);
}

/**
 * 請假流程中的第一個對象,組長
 */
class GroupLeader extends Leader{

 public GroupLeader(String name) {
 super(name);
 }

 protected void handler(Event event) {
 if(event.getDays() < 3){
 System.out.println("--------------------請假條--------------------");
 System.out.print("| 請假人:"+event.getName()+" | ");
 System.out.println("請假天數(shù):"+event.getDays()+"天"+" |");
 System.out.println("| 請假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(組長),通過!");
 System.out.println();
 }else{
 System.out.println(this.getName()+"(主管),沒有權限!");
 this.nextLeader.handler(event);
 }
 }
}

/**
 * 請假流程中的第二個對象,部門主管
 */
class Manager extends Leader{

 public Manager(String name) {
 super(name);
 }

 protected void handler(Event event) {
 if(event.getDays() < 10){
 System.out.println("--------------------請假條--------------------");
 System.out.print("| 請假人:"+event.getName()+" | ");
 System.out.println("請假天數(shù):"+event.getDays()+"天"+" |");
 System.out.println("| 請假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(主管),請假通過!");
 System.out.println();
 }else{
 System.out.println(this.getName()+"(總經(jīng)理),沒有權限!"); 
 this.nextLeader.handler(event);
 }
 }
}

/**
 * 請假流程中的第三個對象,總經(jīng)理
 */
class GeneralManager extends Leader{

 public GeneralManager(String name) {
 super(name);
 }

 protected void handler(Event event) {
 if(event.getDays() < 30){
 System.out.println("--------------------請假條--------------------");
 System.out.print("| 請假人:"+event.getName()+" | ");
 System.out.println("請假天數(shù):"+event.getDays()+"天"+" |");
 System.out.println("| 請假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(總經(jīng)理)");
 System.out.println();
 }else{
 System.out.println("--------------------請假條--------------------");
 System.out.print("| 請假人:"+event.getName()+" | ");
 System.out.println("請假天數(shù):"+event.getDays()+"天"+" |");
 System.out.println("| 請假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(總經(jīng)理),請假人不通過!");
 System.out.println();
 }
 }
}

責任鏈模式主要用于流程控制這一類的開發(fā),相比較于單純用if-else模式,在代碼修改和整合上有更高的效率,更利于代碼維護。而且,需要增加責任鏈中的對象時,需要在再實現(xiàn)一個具體的責任鏈類,然后創(chuàng)建責任對象,并維護責任鏈關系就行,不需要更大的開銷,而且在實際設計中,我們很多時候責任鏈的維護都在配置文件中進行,這樣我們將節(jié)省更多的開發(fā)時間。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • IDEA中Javaweb項目圖片加載不出來解決方案

    IDEA中Javaweb項目圖片加載不出來解決方案

    在IDEA中能夠正常的預覽到圖片,但是在生成項目的war包時,項目的目錄結構卻會發(fā)生變化,所以無法訪問圖片,本文主要介紹了IDEA中Javaweb項目圖片加載不出來解決方案,感興趣的可以了解一下
    2023-10-10
  • Lucene?索引刪除策略源碼解析

    Lucene?索引刪除策略源碼解析

    這篇文章主要為大家介紹了Lucene?索引刪除策略源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • CMD運行Intellij Idea編譯后的class文件操作

    CMD運行Intellij Idea編譯后的class文件操作

    這篇文章主要介紹了CMD運行Intellij Idea編譯后的class文件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • IDEA2023.3.4開啟SpringBoot項目的熱部署(圖文)

    IDEA2023.3.4開啟SpringBoot項目的熱部署(圖文)

    本文使用的開發(fā)工具是idea,使用的是springboot框架開發(fā)的項目,配置熱部署,可以提高開發(fā)效率,文中通過圖文介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • java 遞歸深入理解

    java 遞歸深入理解

    一個過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個大型復雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,需要的朋友可以參考下
    2012-11-11
  • java中建立0-10m的消息(字符串)實現(xiàn)方法

    java中建立0-10m的消息(字符串)實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava中建立0-10m的消息(字符串)實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 詳解SpringBoot?調(diào)用外部接口的三種方式

    詳解SpringBoot?調(diào)用外部接口的三種方式

    SpringBoot不僅繼承了Spring框架原有的優(yōu)秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發(fā)過程,這篇文章主要介紹了SpringBoot?調(diào)用外部接口的三種方式,需要的朋友可以參考下
    2023-04-04
  • java并發(fā)編程專題(二)----如何創(chuàng)建并運行java線程

    java并發(fā)編程專題(二)----如何創(chuàng)建并運行java線程

    這篇文章主要介紹了java并發(fā)編程如何創(chuàng)建并運行java線程,文中講解非常詳細,示例代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • Java打亂ArrayList生成一個隨機序列列表

    Java打亂ArrayList生成一個隨機序列列表

    有時候會需要將一個ArrayList或者數(shù)組中的數(shù)字打亂,方便后續(xù)使用,比如隨機出題、答案選項打亂、連線題打亂、抽獎號碼打亂等等,把我自己寫的一段代碼貼出來分享給大家。
    2016-08-08
  • Java使用Validation自定義Double類型屬性校驗

    Java使用Validation自定義Double類型屬性校驗

    這篇文章主要為大家詳細介紹了Java如何使用Validation自定義Double類型屬性校驗,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2024-11-11

最新評論

汪清县| 上饶市| 贵港市| 商河县| 武宣县| 凤庆县| 泸定县| 神木县| 交口县| 科尔| 黄陵县| 遂溪县| 武宁县| 建德市| 阿克苏市| 台州市| 云林县| 石狮市| 皋兰县| 巧家县| 裕民县| 福州市| 定结县| 台北市| 溧水县| 灌南县| 白山市| 宜君县| 英山县| 新乡市| 阳春市| 汕尾市| 安达市| 临安市| 津南区| 喀喇| 焦作市| 文安县| 特克斯县| 水城县| 定南县|