Java设计模式之策略设计模式
1.什么是-策略设计模式
2.策略设计模式的优缺点
1.1优点
1.1.1.可以动态的改变对象的行为
1.1.2.分离业务逻辑实现和需求
1.2缺点
1.2.1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类
1.3.2.策略模式将造成产生很多策略类
2.设计模式示例
2.1.示例背景
这里的示例是以小明和女朋友出去旅游选择交通工具做背景,之前设计模式职责链的时候小明已经请假相亲,结婚啥的都已经做完了,结完婚是不是该出去度蜜月了。一天小明决定去马尔代夫度蜜月,然后选择交通方式的时候犯愁了,小明是一位选择性强迫症的人,他在考虑是坐汽车还是火车还是飞机呢。他决定吧这三个想法告诉他的老婆小红,让小红来决定(Context类来充当这个角色)。三个交通工具类分别是:Aircraft-飞机,Automobile-汽车,Train-火车,每一种交通工具的最终目的都是为了出行,所以定义一个抽象类Travel 并定义抽象方法TravelInterface让三个交通工具实现该方法
2.2.代码区域
2.2.1.创建抽象类Travel 定义抽象方法
/** * 出行抽象类 */ public abstract class Travel { /** * 出行抽象的公共接口方法 */ public abstract void TravelInterface(); }
2.2.2.创建火车类并实现抽象Travel 类
/** * 火车类 */ public class Train extends Travel { @Override public void TravelInterface() { System.out.println("我选择乘坐火车去旅游"); } }
2.2.3.创建汽车类并实现抽象Travel 类
/** * 汽车类 */ public class Automobile extends Travel { @Override public void TravelInterface() { System.out.println("我选择乘坐汽车去旅游"); } }
2.2.4.创建飞机类并实现抽象Travel 类
/** * 飞机类 */ public class Aircraft extends Travel { @Override public void TravelInterface() { System.out.println("我选择乘坐飞机去旅游"); } }
2.2.4.创建实现抽象出行的实现类-小明的媳妇
/** * 控制中心 */ public class Context { public void setStrategy(Travel strategy) { this.strategy = strategy; } private Travel strategy; public Context(Travel strategy) { this.strategy = strategy; } public void TravelInterface(){ this.strategy.TravelInterface(); } }
2.2.5.创建小明测试类
/** * 出行选择对应的出行方式 */ public class TourismTest { public static void main(String args[]) { Context context=null; context=new Context(new Aircraft());/*通过传递某个出行对象来决定真正出行的交通工具*/ context.TravelInterface(); context=new Context(new Train()); context.TravelInterface(); context=new Context(new Automobile()); context.TravelInterface(); } }
执行思路总结:从实例中可以看出来优缺点的确很明显,本身出行的交通工具都是可以划分为交通工具类的,只是动作方法实现不同,这也就是缺点策略模式将造成产生很多策略类。有没有发现策略模式和职责链模式有几分相似之处。这里小明发起请求最终再交给小红来实现,小红就是Context 这个类。