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 {@Overridepublic void TravelInterface() {System.out.println("我选择乘坐火车去旅游");} }
2.2.3.创建汽车类并实现抽象Travel 类
/*** 汽车类*/ public class Automobile extends Travel {@Overridepublic void TravelInterface() {System.out.println("我选择乘坐汽车去旅游");} }
2.2.4.创建飞机类并实现抽象Travel 类
/*** 飞机类*/ public class Aircraft extends Travel {@Overridepublic 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 这个类。