责任链模式
来源:互联网 发布:程序员转正心得 编辑:程序博客网 时间:2024/06/11 10:15
在军队中,一般根据战争规模的大小和重要性由不同的长官(Officer)来下达作战命令,情报人员向上级递交军情(如敌人的数量),作战命令需要上级批准,如果直接上级不具备下达命令的权利,则上级又传递给上级,直到有人可以决定为止,这类似我们课本中学习的责任链模式。可以通过责任链模式来模拟该过程,客户类(Client)模拟情报人员,首先向级别最低的班长(Banzhang)递交任务书(Mission),即军情,如果超出班长的权利范围,则传递给排长(Paizhang),排长如果也不能处理则递交给营长(Yingzhang),如果营长也不能处理,则需要开会讨论。我们设置这几级长官的权利范围分别是:
(1) 敌人的数量<10,班长下达作战命令。
(2) 10<=敌人的数量<=50,排长下达作战命令。
(3) 50<=敌人的数量<=200,营长下达作战命令。
(4)敌人的数量>200,需要开会讨论再下达作战命令。
UML图:
Mission类
public class Mission { private String mission; private int enemyNumber; public Mission() { super(); } public Mission(String mission, int enemyNumber) { super(); this.mission = mission; this.enemyNumber = enemyNumber; } public String getMission() { return mission; } public void setMission(String mission) { this.mission = mission; } public int getEnemyNumber() { return enemyNumber; } public void setEnemyNumber(int enemyNumber) { this.enemyNumber = enemyNumber; }}
Officer类
public abstract class Officer { protected String name; protected Officer successor; public Officer(String name) { this.name = name; } public void setSuccessor(Officer successor) { this.successor = successor; } public abstract void handleMission(Mission mission);}
Banzhang类
public class Banzhang extends Officer{ public Banzhang(String name) { super(name); } @Override public void handleMission(Mission mission) { if(mission.getEnemyNumber()>0 && mission.getEnemyNumber()<10){ System.out.println(name+"接到"+mission.getMission()+"的军情"+",敌人数量为"+mission.getEnemyNumber()+",可以下达作战指令"); }else{ if(this.successor!=null) { this.successor.handleMission(mission); } } }}
Paizhang类
public class Paizhang extends Officer { public Paizhang(String name) { super(name); } @Override public void handleMission(Mission mission) { if (mission.getEnemyNumber() >= 10 && mission.getEnemyNumber() < 50) { System.out .println(name + "接到" + mission.getMission() + "的军情" + ",敌人数量为" + mission.getEnemyNumber() + ",可以下达作战指令"); } else { if (this.successor != null) { this.successor.handleMission(mission); } } }}
Yingzhang类
public class Yingzhang extends Officer { public Yingzhang(String name) { super(name); } @Override public void handleMission(Mission mission) { if (mission.getEnemyNumber() >= 50 && mission.getEnemyNumber() < 200) { System.out .println(name + "接到" + mission.getMission() + "的军情" + ",敌人数量为" + mission.getEnemyNumber() + ",可以下达作战指令"); } else { System.out .println("接到" + mission.getMission() + "的军情" + ",敌人数量为" + mission.getEnemyNumber() + ",敌人太多了,开会讨论!"); } }}
Client类
public class Client { public static void main(String[] args) { Officer Bangzhang = new Banzhang("王班长"); Officer Paizhang = new Paizhang("赵排长"); Officer Yingzhang = new Yingzhang("王营"); Bangzhang.setSuccessor(Paizhang); Paizhang.setSuccessor(Yingzhang); Mission m1 = new Mission("mission1", 3); Bangzhang.handleMission(m1); Mission m2 = new Mission("mission2", 38); Bangzhang.handleMission(m2); Mission m3 = new Mission("mission3", 100); Bangzhang.handleMission(m3); Mission m4 = new Mission("mission4", 400); Bangzhang.handleMission(m4); }}
运行结果:
阅读全文
0 0
- 责任链模式
- 深入浅出责任链模式
- 责任链模式
- 责任链模式
- 深入浅出责任链模式
- 责任链模式(一)
- 责任链模式(二)
- 责任链模式(三)
- 责任链模式
- java责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- c++ 责任链模式
- java责任链模式
- 责任链模式
- leetCode-Search in Rotated Sorted Array II
- 反射抽取的点
- Java中static变量作用和用法详解
- java集合 list
- Qt 在Windows下的安装
- 责任链模式
- 源码分析commitAllowingStateLoss() 和commit()的区别(挑重点去知道)
- Windbg调试新手入门
- leetcode 234. Palindrome Linked List
- Error configuring application listener of class org.springframework.web.context.ContextLoaderListene
- 面向对象原则:高内聚、低耦合。多聚合、少继承
- POI所需jar包
- android_glide图片加载
- 分享一个内发光材质。