背景
艾克塞林和她的白骑士在一次作战行动中,被原生种的杂兵包围,不幸被俘。联邦军指挥部得知这个消息,决定执行一个周密的解救计划。响介每时每刻都在担心艾克塞林的安危,认为制定计划会浪费救援的时间,于是,独狼入虎穴,响介带着他的古铁巨人开始了拯救艾克塞林的征程。
实现
入侵者:对于敌方来说,我方是入侵者
/**
* 入侵者
*/
public interface IInvader {
/**
* 入侵
* @return 返回入侵结果
*/
boolean invade();
/**
* 入侵成功
*/
void success();
/**
* 入侵失败
*/
void fail();
}
古铁巨人:作为入侵者要突破对方的防线
/**
* 古铁巨人
*/
public class AncientIronGiant implements IInvader {
@Override
public boolean invade() {
System.out.println("攻击敌军防线!拯救白骑士和艾克塞林!");
return new Random(System.currentTimeMillis()).nextBoolean();
}
@Override
public void success() {
System.out.println("拯救白骑士和艾克塞林任务完成!");
}
@Override
public void fail() {
System.out.println("悠悠苍天,何薄于我!出师未捷身先死,有心杀贼,无力回天!GAME OVER!");
}
}
第一层防线
/**
* 第一层防卫军
*/
public class FirstLayerDefender implements IDefender {
private SecondLayerDefender nextDefender = new SecondLayerDefender();
@Override
public void defend(IInvader invader) {
System.out.println("第一层防卫军再此,来者安敢放肆!");
if (invader.invade()) {
// 侵略成功
nextDefender.defend(invader);
} else {
// 侵略失败
invader.fail();
}
}
}
第二层防线
/**
* 第二层防卫军
*/
public class SecondLayerDefender implements IDefender {
private LastLayerDefender nextDefender = new LastLayerDefender();
@Override
public void defend(IInvader invader) {
System.out.println("第二层防卫军再此,来者安敢放肆!");
if (invader.invade()) {
// 侵略成功
nextDefender.defend(invader);
} else {
// 侵略失败
invader.fail();
}
}
}
最后一层防线:突破这层防线就能够拯救艾克塞林了
/**
* 最后一层防卫军
*/
public class LastLayerDefender implements IDefender {
@Override
public void defend(IInvader invader) {
System.out.println("最后一层防卫军再此,来者安敢放肆!");
if (invader.invade()) {
// 侵略成功
invader.success();
} else {
// 侵略失败
invader.fail();
}
}
}
测试
public class Test {
public static void main(String[] args) {
IInvader invader = new AncientIronGiant();
IDefender defender = new FirstLayerDefender();
defender.defend(invader);
}
}
测试结果一:倒在第一层防线
第一层防卫军再此,来者安敢放肆!
攻击敌军防线!拯救白骑士和艾克塞林!
悠悠苍天,何薄于我!出师未捷身先死,有心杀贼,无力回天!GAME OVER!
测试结果二:成功突破防线
第一层防卫军再此,来者安敢放肆!
攻击敌军防线!拯救白骑士和艾克塞林!
第二层防卫军再此,来者安敢放肆!
攻击敌军防线!拯救白骑士和艾克塞林!
最后一层防卫军再此,来者安敢放肆!
攻击敌军防线!拯救白骑士和艾克塞林!
拯救白骑士和艾克塞林任务完成!
总结
响介以为突破防线就能够成功解救艾克塞林,无奈艾克塞林却像变了一个人似的,对响介发起攻击,看来原生种已经控制了艾克塞林的意识。欲知后事如何,请看下n回分解~~
责任链模式比较好理解,用通俗的话来讲就是“踢皮球”,你叫我帮忙解决问题,我搞不定,叫你去找其他人帮忙,其他人又搞不定,把球又踢给了我。这里就造成了一个死循环,当然这是责任链模式的一个缺点。责任链模式在平时开发中也是经常用到,比如大名鼎鼎的拦截器、过滤器等等。