设计模式之职责链模式
来源:互联网 发布:js input 宽度 编辑:程序博客网 时间:2024/06/05 05:09
定义
使多个对象都由机会处理请求,从而避免了请求的发送者喝接受者之间的耦合。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
使用場景
當某人申請一定的費用進行活動的時候,根據不同的金額需要通過項目經理,部門經理,總經理的審批。
代碼實例
(1)定義職責的抽象類
package design;public abstract class Handle {//持有下一個處理請求的對象 protected Handle sussor = null; //這裏使用setter方法,不能使用構造器方法 public void setHandle(Handle h) { this.sussor = h;//這裏將h寫成了sussor,報空指針異常 } public abstract void handleRequest(String user,int money);}
(2)項目經理的處理
package design;public class ProjectHandle extends Handle { public void handleRequest(String user,int money) { if (money < 500) { if (user.equals("小李")) { System.out.println("通過申請"); } else { System.out.println("除小李之外都不可以"); } } else { if (sussor != null) this.sussor.handleRequest(user,money); else System.out.println("sussor為空"); } }}
(3)部門經理的處理
package design;public class DepHandle extends Handle{ @Override public void handleRequest(String user, int money) { // TODO Auto-generated method stub if (money < 1000) { if (user.equals("小李")) { System.out.println("部門經理通過了小李的申請"); } else System.out.println("部門經理沒批准"+user+"的申請"); } else{ this.sussor.handleRequest(user, money); } }}
(4)縂經理的處理
package design;public class GeneralHandle extends Handle{ @Override public void handleRequest(String user, int money) { // TODO Auto-generated method stub if (user.equals("小李")) { System.out.println("總經理通過了小李的請求"); } else { System.out.println("縂經理沒有通過"+user+"的申請"); } }}
(5)客戶端
package design;public class Client { public static void main(String[] args) {//組裝職責鏈 Handle h1 = new ProjectHandle(); Handle h2 = new DepHandle(); Handle h3 = new GeneralHandle(); h1.setHandle(h2); h2.setHandle(h3); h1.handleRequest("小李", 2000); h1.handleRequest("Burning",100); }}
運行結果:
總經理通過了小李的請求
除小李之外都不可以
阅读全文
0 0
- 设计模式 之 职责链
- 设计模式之职责链
- 设计模式之职责链
- 设计模式之职责链模式
- 设计模式之职责链模式
- C# 设计模式之 职责链模式
- 设计模式之职责链模式
- 大话设计模式之职责链模式
- 设计模式之职责链模式
- 设计模式之职责链模式
- 大话设计模式之职责链模式
- 设计模式之职责链模式
- 设计模式之-----职责链模式
- 设计模式之职责链模式
- 设计模式之职责链模式
- 设计模式之职责链模式
- 设计模式之职责链模式
- C++设计模式之职责链模式
- 如何使希尔排序具有稳定性
- GC 垃圾回收机制
- 浅谈堆排序的堆调整及时间复杂度
- 在Eclipse中设置注释和注释模板
- 后缀表达式
- 设计模式之职责链模式
- PHP $_FILES函数详解
- android开发-事件分发详解
- 正则表达式
- IAR 新建项目总结 ----- /*自己编写*/
- 中缀转后缀的程序,及详细的代码说明
- 第三章 样式 盒模型
- 坚持#第204天~学习了一整天Linux命令
- 快速创建springboot项目:使用http://start.spring.io/网页创建,使用IDEA的Spring Initializr创建,使用SpringBoot CLI创建