实战java设计模式(二十四)职责链模式

1 介绍

职责链模式也叫责任链模式,理解它可以用数据结构链表去理解。

2 例子

去火车站找人,假设家人不幸丢失,去一个陌生的地方找人,人生地不熟,先随便去个火车站或者汽车站找,如果没有找到警察叔叔就会说要不去飞机场试试看看,就这样一个个的找。

2.1 站台父类

abstract class Station{
    //属性
    public List<String> names=new ArrayList<>();
    public String stationName;
    public Station nextStation;
    //找到了这个人
    public void find(String name){
        if(names.contains(name)){
            System.out.println("在"+this.stationName+"找到了"+name);
        }
        else {
            nextStation.find(name);
        }
    }
}

2.2 站台实现类

class TrainStation extends Station{
    TrainStation(){
        super.stationName="火车站";
        super.names.add("李建国");
        super.names.add("刘大刚");
    }
}
class Airport extends Station{
    Airport(){
        super.stationName="飞机场";
        super.names.add("张三");
        super.names.add("李四");
    }
}
class BusStation extends Station{
    BusStation(){
        super.stationName="汽车站";
        super.names.add("王五");
        super.names.add("柳飘飘");
    }
}

2.3 主测试类

public class Main {
    public static Station getChain(){
        //创建各自的站
        Station busStation=new BusStation();
        Station airport=new Airport();
        Station trainStation=new TrainStation();

        //各自首尾相接连接起来
        busStation.nextStation=airport;
        airport.nextStation=trainStation;
        trainStation.nextStation=busStation;

        //随便返回一个站都可以
        return airport;
    }
    public static void main(String[] args) {
        //建链
        Station station=getChain();
        //找人
        station.find("王五");
        station.find("李建国");
        station.find("张三");

    }
}

注意要有一个建链(本例采用环形链)的方法,对客户端暴露的方法就是去任意一个站台,然后递归寻找就可以。

在汽车站找到了王五
在火车站找到了李建国
在飞机场找到了张三

3 总结

3.1 核心结构

  • 节点父类:包含下一个节点的引用,以及自己处理不了,就交给下一个节点处理的方法。
  • 节点类:继承节点父类。
  • 客户端:一定要有一个建链的方法。

3.2 核心代码结构

就是节点父类的设计,用链表的思路去理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值