您的位置:首页 > 编程语言 > Java开发

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级英雄 我没有打败 波罗斯交给了一拳超人
我是一拳超人 我打败了波罗斯
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: