1. 程式人生 > >Java設計模式大發平臺出售一 責任鏈模式

Java設計模式大發平臺出售一 責任鏈模式

​ 一直都想對設大發平臺出售QQ2952777280【話仙原始碼論壇】hxforum.com 計模式有一個深刻的認識Java設計模式一 責任鏈模式,這樣對於閱讀原始碼的時候就不會那麼吃力了。於是有了想要記錄下設計模式的筆記。打算從自己不怎麼熟悉的設計模式開始寫,裡面穿插著一點自己的想法,希望自己寫完後,會又一個更深刻的理解和流暢的表述。

介紹
​ 為請求建立了一個接受者的鏈,通常一個接收者包含下一個接受者的引用,如果該物件不能處理該請求,就傳給下一個。依次類推,直到有處理的物件為止。

應用例項:jsp servlet的Filter,js中的事件冒泡

例子
​ 通過一個例子來深刻的認識他。以前古代女子都遵從著三從四德,三從:一從父親,二從丈夫,三從兒子。

也就是在家聽父親的,嫁人後,聽丈夫的,喪夫後,聽兒子的。

​ 那麼現在呢,人人平等,那麼我就說以後吧,一步小心就是男子三從四德了,那麼針對男子進行三從四德進行程式碼演練。一男子想買鍵盤,先從母親開始問起,如果母親不想理你 ,你就問你妻子,你妻子不理你,你就問你女兒,你女兒也不理,你就啥也不能買。

程式碼
抽象未來男子人類

/**

  • @ClassName Human
  • @Description 人類
  • @Author ouyangkang
  • @Date 2018-11-05 10:02
    /
    public abstract class Human {
    /

    • @Author ouyangkang
    • @Description 發起請求
    • @Date 10:04 2018/11/5
    • @param
    • @return void
      **/
      public abstract void request();

    /**

    • @Author ouyangkang
    • @Description 獲取請求的型別
    • @Date 10:05 2018/11/5
    • @param
    • @return java.lang.Integer
      **/
      public abstract Integer getType();
      }
      具體實現

/**

  • @ClassName Man
  • @Description 未來男子
  • @Author ouyangkang
  • @Date 2018-11-05 10:07
    **/
    public class Man extends Human {

    /**

    • @Date 2018/11/5 10:09
    • @Description 請求
      **/
      private String request;

    /**

    • @Date 2018/11/5 10:14
    • @Description 1 為入贅 2 已入贅 3 喪妻
      **/
      private Integer type ;

    @Override
    public void request() {
    System.out.println(request);
    }

    @Override
    public Integer getType() {
    return this.type;
    }

    public Man(String request, Integer type){
    this.request = request;
    this.type = type;
    }
    }
    處理抽象鏈

/**

  • @ClassName Handler
  • @Description 責任鏈
  • @Author ouyangkang
  • @Date 2018-11-05 10:15
    **/
    public abstract class Handler {

    public static final Integer MOTHER_LEVEL = 1;

    public static final Integer WIFE_LEVEL = 2;

    public static final Integer DAUGHTER_LEVEL = 3;

    public Integer level;

    /**

    • @Date 2018/11/5 10:16
    • @Description 下一個處理者
      **/
      private Handler nexHandler;

    public Handler(Integer level){
    this.level = level;
    }

    /**

    • @Author ouyangkang
    • @Description 處理資訊
    • @Date 10:27 2018/11/5
    • @param human
    • @return void
      **/
      public void handleMessage(Human human){
      if (this.level.equals(human.getType())){
      this.response(human);
      }else {
      if (nexHandler != null){
      //傳遞給下一個處理物件
      this.nexHandler.handleMessage(human);
      }else {
      System.out.println("---------------");
      human.request();
      System.out.println("沒有處理的人了");
      }

      }
      }

    /**

    • @Author ouyangkang
    • @Description 回覆未來男子的請求
    • @Date 10:18 2018/11/5
    • @param
    • @return void
      **/
      public abstract void response(Human human);

    public void setNexHandler(Handler nexHandler){
    this.nexHandler = nexHandler;
    }
    }
    具體實現
    /**

  • @ClassName Mather
  • @Description 母親
  • @Author ouyangkang
  • @Date 2018-11-05 10:28
    **/
    public class Mather extends Handler {

    public Mather(){
    super(Handler.MOTHER_LEVEL);
    }

    @Override
    public void response(Human human) {
    System.out.println("-----------------");
    human.request();
    System.out.println("媽媽愛你 當然同意啦");
    }
    }

/**

  • @ClassName Wife
  • @Description TODO
  • @Author ouyangkang
  • @Date 2018-11-05 10:46
    **/
    public class Wife extends Handler {

    public Wife() {
    super(Handler.WIFE_LEVEL);
    }

    @Override
    public void response(Human human) {
    System.out.println("-----------------");
    human.request();
    System.out.println("");
    }
    }
    /**

  • @ClassName Wife
  • @Description TODO
  • @Author ouyangkang
  • @Date 2018-11-05 10:46
    **/
    public class Wife extends Handler {

    public Wife() {
    super(Handler.WIFE_LEVEL);
    }

    @Override
    public void response(Human human) {
    System.out.println("-----------------");
    human.request();
    System.out.println("上次你那個機械鍵盤不是還能用嗎 不給買");
    }
    }
    /**

  • @ClassName Daughter
  • @Description TODO
  • @Author ouyangkang
  • @Date 2018-11-05 10:48
    **/
    public class Daughter extends Handler {

    public Daughter() {
    super(Handler.DAUGHTER_LEVEL);
    }

    @Override
    public void response(Human human) {
    System.out.println("-----------------");
    human.request();
    System.out.println("給糖吃就同意");
    }
    }
    客戶端
    /**

  • @ClassName Main
  • @Description TODO
  • @Author ouyangkang
  • @Date 2018-11-05 10:49
    **/
    public class Main {
    public static void main(String[] args) {
    Random random = new Random();
    for (int i = 0 ;i < 5;i++){
    Human human = new Man("我要買鍵盤", random.nextInt(4));
    Handler mather = new Mather();
    Handler wife = new Wife();
    Handler daughter = new Daughter();
    mather.setNexHandler(wife);
    wife.setNexHandler(daughter);
    mather.handleMessage(human);

    }

    }
    }
    返回結果

    我要買鍵盤
    給糖吃就同意

    我要買鍵盤
    上次你那個機械鍵盤不是還能用嗎 不給買

    我要買鍵盤
    上次你那個機械鍵盤不是還能用嗎 不給買

    我要買鍵盤
    媽媽愛你 當然同意啦

    我要買鍵盤
    沒有處理的人了