策略模式「Strategy Pattern」- 楚汉争霸(一)

策略模式「Strategy Pattern」- 楚汉争霸(一)

首页模拟经营楚汉争霸OL官方版更新时间:2024-05-13

"架构那个系列写得有点慢,把之前学习设计模式写的文章贴出来给大家看看。设计模式是步入架构师这个职位必备的技能,我们用一些轻松的历史故事来解释一下设计模式在程序中的应用。 "

楚汉争霸策略模式

项羽和刘邦干倒秦国后,两个人要开始争天下了。项羽太猛了,刘邦打不过。刘邦和几个手下于是想了一些计策,刘邦指挥整个团队依计行事。结果大家都知道的,刘邦取得大胜,建立汉朝。我们看看用JAVA程序

怎么表现这个,首先我们先看类图:

策略模式UML

三个妙计是同一类型的东东,那咱就写个接口:

package com.laobaozi.strategy.iface; /** * 首先定一个策略接口 */ public interface IStrategy { //每个妙计都是一个可执行的算法 public void operate(); }

然后再写实现类,总共三条妙计:

明修栈道,暗渡陈仓

package com.laobaozi.strategy.impl; import com.laobaozi.strategy.iface.IStrategy; /** * 汉中栈道被毁,刘邦军队被困汉中: * 张良用计:明修栈道,暗渡陈仓 */ public class ZhandaoChencang implements IStrategy { public void operate() { System.out.println("明修栈道,暗渡陈仓"); } }

离间计

package com.laobaozi.strategy.impl; import com.laobaozi.strategy.iface.IStrategy; /** * 项羽、范增一武一文太厉害了,打不过。 * 使用陈平离间计,项羽中计误以为范增在帮助刘邦。范增怒而辞官归隐,路上含愤而死。 */ public class Lijian implements IStrategy { public void operate() { System.out.println("陈平离间计, 范增辞官归隐"); } }

十面埋伏,四面楚歌

package com.laobaozi.strategy.impl; import com.laobaozi.strategy.iface.IStrategy; /** * * 项羽太厉害了,打不过。 * 韩信联合四方,十面埋伏,四面楚歌,打败项羽。项羽乌江自刎。 */ public class Simianchuge implements IStrategy { public void operate() { System.out.println("十面埋伏,四面楚歌,打败项羽"); } }

好了,大家看看,三个妙计是有了,但妙计需要人来操作执行啊。

package com.laobaozi.strategy; import com.laobaozi.strategy.iface.IStrategy; /** * 刘邦的团队,执行策略。 */ public class Team { //构造函数,你要使用那个妙计 private IStrategy straegy; public Team(IStrategy strategy){ this.straegy = strategy; } //使用计谋了,看我出招了 public void operate(){ this.straegy.operate(); } }

一切准备就绪,刘邦信心满满,带着一群兄弟准备干翻楚霸王项羽。

package com.laobaozi.strategy; import com.laobaozi.strategy.impl.ZhandaoChencang; import com.laobaozi.strategy.impl.Simianchuge; import com.laobaozi.strategy.impl.Lijian; public class LiuBang { /** * 刘邦出手了,按之前商量的依次用计 */ public static void main(String[] args) { Team team; //第一计 System.out.println("-----------栈道被毁,刘邦被困在汉中-------------"); team = new Team(new ZhandaoChencang()); //拿到妙计 team.operate(); //执行 System.out.println("\n\n"); //范增一文一武太厉害了,打不过,第二计。 System.out.println("-----------范增,项羽一文一武太厉害了,打不过,第二计-------------"); team = new Team(new Lijian()); team.operate(); //执行了第二个 System.out.println("\n\n"); //项羽武力值太高,第三计 System.out.println("-----------项羽武力值太高,第三计-------------"); team = new Team(new Simianchuge()); team.operate(); //执行第三计 System.out.println("\n\n"); /* * 策略模式的好处就是:体现了高内聚低耦合的特性呀。 */ } }

运行结果:

-----------栈道被毁,刘邦被困在汉中-------------

明修栈道,暗渡陈仓

-----------范增,项羽一文一武太厉害了,打不过,第二计-------------

陈平离间计, 范增辞官归隐

-----------项羽武力值太高,第三计-------------

十面埋伏,四面楚歌,打败项羽

这就是策略模式,高内聚低耦合的特点也表现出来了, 还有一个就是扩展性,也就是 OCP 原则,策略类可以继续增加下去,只要修改 Team.java 就可以了。

源码:https://github.com/Jim201314/design_pattern

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved