责任链设计模式(Chain of Responsibility Pattern)-七三
2020-02-02 23:57
831 查看
简单介绍
举个栗子,还是拿支付系统来说。用户下了一个订单,那么我们需要处理用户是否使用了优惠券、活动等等
我们把订单处理的整个流程用链表的形式穿插起来,就可以形成一个责任链的形式。
当一个用户下了订单,并使用了优惠券但没有使用活动,在责任链处理中,发现用户没有参加活动,则不进行处理继续调用责任链下一步处理,遇到优惠券Handler的时候,则对其进行操作。
代码实现
public interface BaseHandler{ void doSomething(String input,BaseHandler baseHandler); } public class ChainHandler implements BaseHandler{ // 责任链全部调度任务 private List<BaseHandler> handlers = new ArrayList<>(); // 责任链下标 private int index; public ChainHandler addHandler(BaseHandler baseHandler){ handlers.add(baseHandler); return this; } public void doSomething(String input,BaseHandler baseHandler){ // 若下标行至数组底部,则不执行 if(index==handlers.size()) return; // 取出任务 BaseHandler handle = handlers.get(index); // 下标向下滑动 index ++; handler.doSomething(input,this); } } public class CouponHandler{ @Override public void doSomething(String input,BaseHandler baseHandler){ if("优惠券".equals(input)){ System.out.println("优惠券"); // 若是只想在链中只让一个去处理则在处理的链中retur掉 // return; 停止链的调用 } baseHadler.doSomething(input,baseHandler); } } public class ActivityHandler{ @Override public void doSomethig(String input,BaseHanndler baseHandler){ if("活动".equals(input)){ System.out.println("活动"); } baseHandler.doSomething(input,BaseHandler); } } public class Test{ public static void main(String args[]){ //创建责任链 ChainHandler chainHandler = new ChainHandler(); //给责任链添加任务 chainHandler.addHandler(new CouponHandler()) .addHandler(new ActivityHandler()); //调用责任链 chainHandler.doSomething("优惠券",chainHandler); } }
小结
可能有些人还没有理解这个责任链,不妨先自己用代码写写看。也许多写两边就能明白这个是什么意思啦
じゃあ、まだ今度会いましょう〜
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 设计模式(17)-Chain of Responsibility Pattern
- 设计模式之职责链模式(ChainOfResponsibilityPattern)
- 1.1设计模式在Unity中应用—Behavioral Pattern— Chain of Responsibility Pattern 责任链模式
- 设计模式6--责任链模式(The chain of responsibility pattern)
- 设计模式(17)-Chain of Responsibility Pattern
- .NET设计模式(23): 职责链模式(Chain of Responsibility Pattern)
- 我所理解的设计模式(C++实现)——责任链模式(Chain Of Responsibility Pattern)
- 如何让孩子爱上设计模式 ——22.责任链模式(Chain of Responsibility Pattern)
- C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】
- 23种设计模式--责任链模式-Chain of Responsibility Pattern
- 设计模式(十四)-责任链模式(Chain of Responsibility Pattern)——推卸责任
- C#设计模式——职责链模式(Chain Of Responsibility Pattern)
- 二十四种设计模式:责任链模式(Chain of Responsibility Pattern)
- 设计模式(17)-Chain of Responsibility Pattern
- 设计模式(17)-Chain of Responsibility Pattern
- JAVA设计模式之 职责链模式【Chain of Responsibility Pattern】
- 我所理解的设计模式(C++实现)——责任链模式(Chain Of Responsibility Pattern)
- 设计模式 - Chain of Responsibility Pattern(责任链模式)
- 设计模式(17)-Chain of Responsibility Pattern
- 我读设计模式之Chain Of Responsibility Pattern