"架构那个系列写得有点慢,把之前学习设计模式写的文章贴出来给大家看看。设计模式是步入架构师这个职位必备的技能,我们用一些轻松的历史故事来解释一下设计模式在程序中的应用。 "
楚汉争霸策略模式
项羽和刘邦干倒秦国后,两个人要开始争天下了。项羽太猛了,刘邦打不过。刘邦和几个手下于是想了一些计策,刘邦指挥整个团队依计行事。结果大家都知道的,刘邦取得大胜,建立汉朝。我们看看用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