设计模式——责任链模式(一文看懂)

设计模式主要分为创建型、结构型、行为型
其中创建型包括单例模式、抽象工厂、工厂方法、建造模式、原型模式模式。
结构型模式包括适配器、桥接、组合、装饰者、外观、代理模式。
行为型包括迭代器、观察者、模板方法、责任链、命令、策略模式。
责任链模式是行为型模式的一种:

不同类型的模式的区别见下图:

进入正题:
假设现在存在这样一个问题,小明想要去跟人力资源部长谈事情,但他并不知道哪个才是自己要找的人,他有三个候选对象分布在不同的地方,他就需要对每个人都发出一次请求(询问对方是否是人资部长)这样一来,命令发送者与接收者之间就有强耦合关系。

而责任链这个设计模式就是希望使得多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。
在这里插入图片描述
在上面的例子中也就是这样一个情况,小明先找到候选人A,发出请求,如果A不是,A正好有B的电话,就将请求转移给B,如果B也不是,那他就打电话给C,将请求转移给C。

我们通过这个想法就能设计出类图来:
在这里插入图片描述
successor就是继任人,handle()就是判断自己能否接下这件事。但这个类图还存在一些问题,如果我们此时又多了一个候选人D,并且改变了他们之间的继任顺序,那么需要改动的代码就大大增加了。

因此我们用一个抽象类,将successor和handle放入父类,候选人只需要继承实现就行了。
在这里插入图片描述
举例1.计算器的四则运算
在这里插入图片描述
我们让程序去判断输入的运算符是否是+,若不是则判断是否是-,若不是则判断是否是*,若不是则判断是否是/,若都不是抛出异常警告。
在这里插入图片描述
画出类图:
在这里插入图片描述
CalcUnit:

package Res;

import javax.naming.OperationNotSupportedException;

public abstract class CalcUnit {
   
    private CalcUnit next;
    public CalcUnit(CalcUnit next)
    {
   
        super();
        this.next=next;
    }
    public CalcUnit(){
   }
    public  CalcUnit getNext()
    {
   
        return next;
    }
    public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值