引言
今天公司使用了策略模式解决不同角色用户操作不一样,如果新建几个不同的类写不同的方法或者一个类中有好几个方法,这都是硬编码,所以有一种设计模式是策略模式,例如针对一个排序算法有不同的策略实现。
即定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换,使得算法可独立于使用它的客户而变化,这样的模式是策略模式。
优点
- 可以动态的更改策略实现的和调用策略
缺点
- 调用者必须知道所有的策略
- 策略模式可能会产生多个实现类
实现
1.新建策略接口
public interface Stretegy {
//策略需要实现的方法
public void operate();
}
2.编写实现策略的实现类,这里我们假设建立三个策略
//策略实现一
public class First implements Stretegy{
@Override
public void operate() {
System.out.println("first run!!");
}
}
//策略实现二
public class SecondStre implements Stretegy {
@Override
public void operate() {
System.out.println("sencond run!!");
}
}
//策略实现三
public class Third implements Stretegy {
@Override
public void operate() {
System.out.println("thrid run!!");
}
}
3.编写环境策略类(重要)
public class Context {
//注入抽象策略接口
@Autowired
private Stretegy stretegy;
public Context(Stretegy stretegy){
this.stretegy=stretegy;
}
//自动调用抽象类的方法
public void operate(){
this.stretegy.operate();
}
}
4.具体使用
public class StretegyTest {
public static void main(String[] args) {
//这里只需要新建一个环境策略类,即可随意切换调用策略方法
Context context;
context=new Context(new First());
context.operate();
context=new Context(new SecondStre());
context.operate();
context=new Context(new Third());
context.operate();
}
}