Java设计模式-责任链模式

博客讲述响介为救被俘的艾克塞林,独自带古铁巨人突破多层防线。同时介绍了责任链模式,它类似“踢皮球”,虽有死循环缺点,但在开发中常用,如拦截器、过滤器等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

背景

艾克塞林和她的白骑士在一次作战行动中,被原生种的杂兵包围,不幸被俘。联邦军指挥部得知这个消息,决定执行一个周密的解救计划。响介每时每刻都在担心艾克塞林的安危,认为制定计划会浪费救援的时间,于是,独狼入虎穴,响介带着他的古铁巨人开始了拯救艾克塞林的征程。

实现

入侵者:对于敌方来说,我方是入侵者

/**
 * 入侵者
 */
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回分解~~

责任链模式比较好理解,用通俗的话来讲就是“踢皮球”,你叫我帮忙解决问题,我搞不定,叫你去找其他人帮忙,其他人又搞不定,把球又踢给了我。这里就造成了一个死循环,当然这是责任链模式的一个缺点。责任链模式在平时开发中也是经常用到,比如大名鼎鼎的拦截器、过滤器等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值