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

輕松掌握java責(zé)任鏈模式

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

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

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

             2、簡(jiǎn)化了對(duì)象。使得對(duì)象不需要知道鏈的結(jié)構(gòu)。

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

             4、增加新的請(qǐng)求處理類很方便。

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

具體實(shí)例:

/**
 *這里以公司請(qǐng)假舉例:
 *1、某人請(qǐng)假(事件)
 *2、項(xiàng)目組長(zhǎng)審批:小于三天可以審批,大于三天請(qǐng)示上級(jí)
 *3、部門主管審批:小于十天可以審批,大于十天請(qǐng)示上級(jí)
 *4、總經(jīng)理審批 :小于30天可以審批,大于30天不批準(zhǔn)
 */
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("王五");
 
 //指定責(zé)任鏈模式
 a.setNextLeader(b);
 b.setNextLeader(c);
 
 a.handler(event);
 }
}

/**
 * 事件對(duì)象,責(zé)任鏈中的具體處理事件
 * 該實(shí)例中即為請(qǐng)假這件事兒
 */
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;
 }
}

/**
 * 抽象責(zé)任鏈對(duì)象,后面的所有實(shí)際責(zé)任鏈對(duì)象繼承自該對(duì)象 
 */
abstract class Leader{
 private String name;
 protected Leader nextLeader;//責(zé)任鏈中的下一個(gè)責(zé)任對(duì)象,這是讓責(zé)任鏈持續(xù)下去的基礎(chǔ)
 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);
}

/**
 * 請(qǐng)假流程中的第一個(gè)對(duì)象,組長(zhǎng)
 */
class GroupLeader extends Leader{

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

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

/**
 * 請(qǐng)假流程中的第二個(gè)對(duì)象,部門主管
 */
class Manager extends Leader{

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

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

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

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

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA中Javaweb項(xiàng)目圖片加載不出來解決方案

    IDEA中Javaweb項(xiàng)目圖片加載不出來解決方案

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

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

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

    CMD運(yùn)行Intellij Idea編譯后的class文件操作

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

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

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

    java 遞歸深入理解

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

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

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

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

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

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

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

    Java打亂ArrayList生成一個(gè)隨機(jī)序列列表

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

    Java使用Validation自定義Double類型屬性校驗(yàn)

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

最新評(píng)論

乌拉特后旗| 东安县| 阿勒泰市| 建阳市| 新密市| 鹤壁市| 永胜县| 察哈| 涿州市| 涿鹿县| 图木舒克市| 中卫市| 紫金县| 泰宁县| 东城区| 新民市| 台北县| 临高县| 东平县| 阳西县| 古浪县| 栾川县| 常德市| 潞城市| 阳西县| 正安县| 五大连池市| 新绛县| 静安区| 饶河县| 玉溪市| 昔阳县| 浮山县| 通榆县| 湘阴县| 资溪县| 丹巴县| 香港| 宽城| 蒙自县| 舟曲县|