策略模式:
比如把上班当作一个目标,上班有不同的策略等等。每一次上班都是使用一种策略。
选举哪种策略是根据外面的环境。
程序里面也是同样的道理。总结:就是解决同一个问题的多种方式,但是每次只能选择其中一种方式。
在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 {
@Override
public void job() {
System.out.println("开车上班");
}
}
4、提供一个跑步上班的策略:
package com.weizhaoyang.strategy;
public class RunJobStrategy implements JobStrategy {
@Override
public void job() {
System.out.println("跑步上班");
}
}
5、提供骑自行车上班
package com.weizhaoyang.strategy;
public class BickJobStrategy implements JobStrategy {
@Override
public 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的一种替代思想。与工厂模式很像,但是区别工厂模式回产生很多种对象,但是策略模式只能选择一种。设计模式是以不同的场景和结构而产生不同的设计模式。