策略模式:
比如把上班当作一个目标,上班有不同的策略等等。每一次上班都是使用一种策略。
选举哪种策略是根据外面的环境。
程序里面也是同样的道理。总结:就是解决同一个问题的多种方式,但是每次只能选择其中一种方式。
在spring中InstantiationStrategy bean实例化策略接口,用来进行bean实例化。
写一个例子:
首先提供一个人的行为,每一个人需要依赖某一个策略,代码如下:
package com.weizhaoyang.strategy;/*** 人的行为*/public class Person {private JobStrategy jobStrategy;public Person(JobStrategy jobStrategy){this.jobStrategy=jobStrategy;}public void goJob(){jobStrategy.jon();}}
2、提供一个策略的接口:每一个方法就是解决某一个的问题。
package com.weizhaoyang.strategy;/*** 上班的策略*/public interface JobStrategy {public void job();}
3、写一个开车上班的实现类:
package com.weizhaoyang.strategy;public class CarJobStrategy implements JobStrategy {@Overridepublic void job() {System.out.println("开车上班");}}
4、提供一个跑步上班的策略:
package com.weizhaoyang.strategy;public class RunJobStrategy implements JobStrategy {@Overridepublic void job() {System.out.println("跑步上班");}}
5、提供骑自行车上班
package com.weizhaoyang.strategy;public class BickJobStrategy implements JobStrategy {@Overridepublic void job() {System.out.println("骑自行车上班");}}
6、测试类:
package com.weizhaoyang.strategy;public class StrateTest {public static void main(String[] args) {//初始化一个策略JobStrategy jobStrategy=new CarJobStrategy();//对人初始化Person person=new Person(jobStrategy);person.goJob();}}
运行的结果如下:
那么策略的时机是什么时候改变的呢?可以改成springmvc中的从外面传入参数进来,策略模式也是对if-else的一种替代思想。与工厂模式很像,但是区别工厂模式回产生很多种对象,但是策略模式只能选择一种。设计模式是以不同的场景和结构而产生不同的设计模式。