编程啦啦哩设计模式

Android的设计模式-责任链模式

2017-11-17  本文已影响319人  四月葡萄

前言

Android的设计模式系列文章介绍,欢迎关注,持续更新中:

Android的设计模式-设计模式的六大原则
一句话总结23种设计模式则
创建型模式:
Android的设计模式-单例模式
Android的设计模式-建造者模式
Android的设计模式-工厂方法模式
Android的设计模式-简单工厂模式
Android的设计模式-抽象工厂模式
Android的设计模式-原型模式
行为型模式:
Android的设计模式-策略模式
Android的设计模式-状态模式
Android的设计模式-责任链模式
Android的设计模式-观察者模式
Android的设计模式-模板方法模式
Android的设计模式-迭代器模式
Android的设计模式-备忘录模式
Android的设计模式-访问者模式
Android的设计模式-中介者模式
Android的设计模式-解释器模式
Android的设计模式-命令模式
结构型模式:
Android的设计模式-代理模式
Android的设计模式-组合模式
Android的设计模式-适配器模式
Android的设计模式-装饰者模式
Android的设计模式-享元模式
Android的设计模式-外观模式
Android的设计模式-桥接模式

1.定义

一个请求沿着一条“链”传递,直到该“链”上的某个处理者处理它为止。

2.介绍

3.UML类图

责任链模式UML类图.jpg
角色说明:

4.实现

以送快递为例,单个快递员只负责某个片区的快递,若某个快递目的地不属于当前的片区,则交给下一个快递员来处理,直到有人处理为止。

4.1 创建抽象处理者类

定义处理请求的方法以及持有下一个Handler的引用:

    public abstract class Postman {//快递员抽象类
        protected Postman nextPostman;//下一个快递员

        public abstract void handleCourier(String address);//派送快递
    }
4.2 创建具体处理者类

实现抽象处理者类中的方法:

    public class BeijingPostman extends Postman {//北京快递员

        @Override
        public void handleCourier(String address) {
            if (address.equals("Beijing")) {//北京地区的则派送
                System.out.println("派送到北京");
                return;
            } else {//否则交给下一个快递员去处理
                nextPostman.handleCourier(address);
            }
        }
    }

    public class ShanghaiPostman extends Postman {//上海快递员

        @Override
        public void handleCourier(String address) {
            if (address.equals("Shanghai")) {
                System.out.println("派送到上海");
                return;
            } else {
                nextPostman.handleCourier(address);
            }
        }
    }

    public class GuangzhouPostman extends Postman {//广州快递员

        @Override
        public void handleCourier(String address) {
            if (address.equals("Guangzhou")) {
                System.out.println("派送到广州");
                return;
            } else {
                if (nextPostman != null)
                    nextPostman.handleCourier(address);
            }
        }
    }
4.3 客户端测试
    public void test() {
        //创建不同的快递员对象
        Postman beijingPostman = new BeijingPostman();
        Postman shanghaiPostman = new ShanghaiPostman();
        Postman guangzhouPostman = new GuangzhouPostman();
        
        //创建下一个结点
        beijingPostman.nextPostman=shanghaiPostman;
        shanghaiPostman.nextPostman=guangzhouPostman;

        //处理不同地区的快递,都是从首结点北京快递员开始
        System.out.println("有一个上海快递需要派送:");
        beijingPostman.handleCourier("Shanghai");
        System.out.println("有一个广州快递需要派送:");
        beijingPostman.handleCourier("Guangzhou");
        System.out.println("有一个美国快递需要派送:");
        beijingPostman.handleCourier("America");
        
    }
输出结果:
有一个上海快递需要派送:
派送到上海
有一个广州快递需要派送:
派送到广州
有一个美国快递需要派送:
4.4 说明:

5. 应用场景

6. 优点

7. 缺点

8. Android中的源码分析

相关文章阅读
Android的设计模式-设计模式的六大原则
一句话总结23种设计模式则
创建型模式:
Android的设计模式-单例模式
Android的设计模式-建造者模式
Android的设计模式-工厂方法模式
Android的设计模式-简单工厂模式
Android的设计模式-抽象工厂模式
Android的设计模式-原型模式
行为型模式:
Android的设计模式-策略模式
Android的设计模式-状态模式
Android的设计模式-责任链模式
Android的设计模式-观察者模式
Android的设计模式-模板方法模式
Android的设计模式-迭代器模式
Android的设计模式-备忘录模式
Android的设计模式-访问者模式
Android的设计模式-中介者模式
Android的设计模式-解释器模式
Android的设计模式-命令模式
结构型模式:
Android的设计模式-代理模式
Android的设计模式-组合模式
Android的设计模式-适配器模式
Android的设计模式-装饰者模式
Android的设计模式-享元模式
Android的设计模式-外观模式
Android的设计模式-桥接模式

上一篇 下一篇

猜你喜欢

热点阅读