Java设计模式之责任链模式和一拳超人
2018-01-30 21:40
417 查看
名称
Chain of responsibility举例
一拳超人
威胁等级
根据其威胁程度分为:神,龙,鬼,虎,狼,有时也被用作表示怪人或怪物的强度。
神:可能导致人类灭亡的危机;
龙:可能导致数个城镇被毁的危机;
鬼:导致一个城镇机能停止或毁灭的危机;
虎:造成大量伤亡的危机;
狼:有危险因素出现。
英雄定位
琦玉老师:没有什么是一拳解决不了的,如果有再来一拳。
S级:英雄的顶点,可应对灾害级别鬼~龙。其他级别英雄口中的“怪物”,个性都非常强,缺乏协作性。
A级:大部分英雄的目标,可应对灾害级别虎~鬼。
B级:比普通人强大许多,可应对灾害级别狼~虎。
C级:普通人或者比普通人略强,主要工作是惩治小偷或窃贼等。
分析
以一拳超人为例,可以看到不同级别的英雄可以应对不同的威胁,如果在动画中普通民众遇到危险会向英雄协会求救。这时候英雄协会会根据灾害等级来派出等级不同的英雄来处理这些灾祸,如果低级的英雄处理不了就找高级的英雄,如果S级的英雄都处理不了,那么只有琦玉老师也就是我们的一拳超人可以处理了。如果琦玉老师这时候在超市里等超市减价就不一定了有时间处理了。这个时候就会没有人处理这个请求。
示例代码
abstract class Hero{ public static final int ONEPUNCHMAN=1000;//琦玉老师 public static final int SHERO=4;//S级别英雄 public static final int AHERO=3;//A级别英雄 public static final int BHERO=2;//B级别英雄 public static final int CHERO=1;//C级别英雄 protected int level;//英雄等级 protected Hero nextHero;//下一个等级的英雄 public void setNextHero(Hero nextHero){ this.nextHero = nextHero; } public void logMessage(int disaterlevel, String enemy){ if(this.level >=disaterlevel){ HeroWin(enemy); }else { HeroLose(enemy); } if(nextHero !=null){ nextHero.logMessage(disaterlevel, enemy); } } abstract protected void HeroWin(String enemy); abstract protected void HeroLose(String enemy); public abstract String toString(); } class OnePunchMan extends Hero{ public OnePunchMan(int level){ this.level=level; } @Override protected void HeroWin(String enemy) { System.out.println("我是一拳超人 我打败了"+enemy); } @Override protected void HeroLose(String enemy) { System.out.println("我是一拳超人 我打败了 "+enemy); } @Override public String toString() { // TODO Auto-generated method stub return "一拳超人"; } } class SHero extends Hero{ public SHero(int level) { this.level=level; } @Override protected void HeroWin(String enemy) { System.out.println("我是S级英雄 我打败了"+enemy); } @Override protected void HeroLose(String enemy) { System.out.println("我是S级英雄 我没有打败 "+enemy+"交给了"+this.nextHero.toString()); } @Override public String toString() { // TODO Auto-generated method stub return "S级英雄"; } } class AHero extends Hero{ public AHero(int level) { this.level=level; } @Override protected void HeroWin(String enemy) { System.out.println("我是A级英雄 我打败了 "+enemy); } @Override protected void HeroLose(String enemy) { System.out.println("我是A级英雄 我没有打败 "+enemy+"交给了"+this.nextHero.toString()); } @Override public String toString() { // TODO Auto-generated method stub return "A级英雄"; } } class BHero extends Hero{ public BHero(int level) { this.level=level; } @Override protected void HeroWin(String enemy) { System.out.println("我是B级英雄 我打败了 "+enemy); } @Override protected void HeroLose(String enemy) { System.out.println("我是B级英雄 我没有打败 "+enemy+"交给了"+this.nextHero.toString()); } @Override public String toString() { // TODO Auto-generated method stub return "B级英雄"; } } class CHero extends Hero{ public CHero(int level) { this.level=level; } @Override protected void HeroWin(String enemy) { System.out.println("我是C级英雄 我打败了 "+enemy); } @Override protected void HeroLose(String enemy) { System.out.println("我是C级英雄 我没有打败 "+enemy+"交给了"+this.nextHero.toString()); } @Override public String toString() { // TODO Auto-generated method stub return "C级英雄"; } } class SuperHeroClub{ //对灾难进行评级 public static final int GODLEVEL=5;//神级 public static final int DRAGONLEVEL=4;//龙级 public static final int GHOSTLEVEL=3;//鬼级 public static final int TIGERLEVEL=2;//虎级 public static final int WOLFLEVEL=1;//狼级 private Hero onepunch,sHero,aHero,bHero,cHero; public SuperHeroClub() { onepunch=new OnePunchMan(Hero.ONEPUNCHMAN); sHero=new SHero(Hero.SHERO); aHero=new AHero(Hero.AHERO); bHero=new BHero(Hero.BHERO); cHero=new CHero(Hero.CHERO); } //现在构造一个超级英雄链条 public Hero getSuperChain() { this.cHero.setNextHero(this.bHero); this.bHero.setNextHero(this.aHero); this.aHero.setNextHero(this.sHero); this.sHero.setNextHero(this.onepunch); return this.cHero; } } public class Client{ public static void main(String[]args) { //得到呼救 SuperHeroClub superHeroClub=new SuperHeroClub(); Hero heroChain=superHeroClub.getSuperChain(); heroChain.logMessage(superHeroClub.GODLEVEL, "波罗斯"); } }
输出结果:
我是C级英雄 我没有打败 波罗斯交给了B级英雄 我是B级英雄 我没有打败 波罗斯交给了A级英雄 我是A级英雄 我没有打败 波罗斯交给了S级英雄 我是S级英雄 我没有打败 波罗斯交给了一拳超人 我是一拳超人 我打败了波罗斯
相关文章推荐
- Java设计模式之责任链模式
- Java设计模式之责任链模式
- Java设计模式--责任链模式
- Java设计模式12——责任链模式
- JAVA设计模式——责任链模式
- java-设计模式(行为型)-【责任链模式】
- java设计模式之责任链模式
- 实例讲解Java的设计模式编程中责任链模式的运用
- Java设计模式编程中的责任链模式使用示例
- 【java设计模式】责任链模式
- java设计模式----责任链模式
- Java设计模式之行为型模式(责任链模式)
- JAVA啊设计模式之责任链模式
- JAVA设计模式(17) —<行为型>责任链模式(Chain of Responsibility)
- java设计模式之责任链模式
- Java设计模式之责任链模式、职责链模式
- JAVA设计模式学习20——责任链模式
- Java设计模式——责任链模式
- JAVA设计模式---责任链模式
- Java设计模式笔记之责任链模式