zoukankan      html  css  js  c++  java
  • 设计模式——责任链模式

    行为型模式(共11种)

    其中解释器模式,命令模式,访问者模式 这三个用的比较少,其他模式用的比较多

    行为模式中的责任链模式

    一个请求处理:先给第一个对象处理,如果第一个对象处理不了交给第二个对象进行处理,第二个如果处理不了,则交给第三个处理,以此类推。比如说

    • 奖学金的审批
    • 公司了流程审批
    • 接力跑

    场景:

    这似乎可以用if-else解决,但是如果后续要添加条件的话就需要手动在代码中修改,代码多修改起来容易乱,不利于扩展。而且用if-else的话,代码会非常长。比如添加一个新的链节点

     下面看具体案例:

    请假条对象

     1 package ChainOfResp;
     2 
     3 /**
     4  * Created by Administrator on 2018/7/4.
     5  */
     6 public class LeaveRequest {
     7     private String name;
     8     private int daysULeave;
     9     private String reason;
    10 
    11     public LeaveRequest(String name, int date, String reason) {
    12         this.name = name;
    13         this.daysULeave = date;
    14         this.reason = reason;
    15     }
    16 
    17     public String getName() {
    18         return name;
    19     }
    20 
    21     public void setName(String name) {
    22         this.name = name;
    23     }
    24 
    25     public int getDaysULeave() {
    26         return daysULeave;
    27     }
    28 
    29     public void setDaysULeave(int date) {
    30         this.daysULeave = date;
    31     }
    32 
    33     public String getReason() {
    34         return reason;
    35     }
    36 
    37     public void setReason(String reason) {
    38         this.reason = reason;
    39     }
    40 }

    抽象领导对象:

     1 package ChainOfResp;
     2 
     3 /**
     4  * Created by Administrator on 2018/7/4.
     5  */
     6 public abstract class Leader {
     7     protected String name;
     8     protected Leader nextLeader;
     9 
    10     public Leader(String name){
    11         super();
    12         this.name=name;
    13     }
    14     public void setNextLeader(Leader nextLeader){
    15         this.nextLeader=nextLeader;
    16     }
    17     protected abstract void handerRequest(LeaveRequest request);
    18 }

    小领导实例类,继承Leader

    package ChainOfResp;
    
    /**
     * 小领导
     * Created by Administrator on 2018/7/4.
     */
    public class Director extends Leader{
        public Director(String name){
            super(name);
    
        }
        
        @Override
        public void setNextLeader(Leader nextLeader) {
            super.setNextLeader(nextLeader);
        }
    
        @Override
        protected void handerRequest(LeaveRequest request) {
    
           if (request.getDaysULeave()<3){
    
               System.out.println("员工"+request.getName()+" "+"请假天数"+request.getDaysULeave()+" 请假理由"+request.getReason());
               System.out.println("领导"+this.name+",审批通过!");
           }else{
               this.nextLeader.handerRequest(request);
           }
        }
    }

    然后再创建另外两个继承自Leader的类,之后形成一个链表,代表责任链的关系。

    最后写一个测试类

     1 package ChainOfResp;
     2 
     3 /**
     4  * Created by Administrator on 2018/7/4.
     5  */
     6 public class Test {
     7     public static void main(String[] args){
     8         Leader a=new Director("zhangsan");
     9         Leader b=new Manager("lisi");
    10         Leader c=new BigManager("wangwu");
    11 
    12         //组织责任链的关系,形成链表,这里定义的是领导<经理<大经理
    13         a.setNextLeader(b);
    14         b.setNextLeader(c);
    15         LeaveRequest request=new LeaveRequest("wu",5,"gohome");
    16         a.handerRequest(request);
    17       
    18     }
    19 }

    用责任链的好处:

    • 到时候链表的关系我们可以写到配置文件里,而不需要在源文件中用ifelse条件修改。
    • 修改链表之间的关系的时候也更加方便,不需要在原来程序的代码(已有的类不需要改动)
    • 修改的仅仅是链表的关系,以及新添加一个责任链的节点而已

    除了使用链表的方式进行处理,还可以用数组的方式来存储他们之间的关系,也就是用ArrayList来保存责任链(这里就是他们级别的关系)之间的关系。

    源码:https://github.com/gowufang/DesignPattern


    结构型模型:

    代理模式

    适配模式

    桥接模式

    组合模式

    装饰模式

    外观模式

    享元模式

    创建型模式:

    单例

    工厂(关注对象的创建)

  • 相关阅读:
    归一化与标准化的概念与区别
    深度学习中的优化器学习
    yolo3与yolo-tiny
    给tensorflow1.x estimator 添加timeline分析性能
    python 爬取百度图片
    TensorFlow 高性能数据输入管道设计指南
    TensorRT加速tensorflow模型(使用Tensorflow内置tensorRT,避免写自定义Plugin)
    21.Pod的limit和request和资源监控收集服务Heapster
    20.调度器,预选策略和优选策略
    8.docker的安全性
  • 原文地址:https://www.cnblogs.com/volvane/p/9263715.html
Copyright © 2011-2022 走看看