一、核心作用:
- 策略模式对应于解决某一个问题的算法族,允许用户从该算法中任选一个算法解决某个问题,同时可以方便的更换算法或者增加新的算法
- 客户端决定调用哪个算法
- 分离算法,选择实现
二、常见应用场景:
1、HttpServlet
2、GUI编程布局管理
三、命令模式的实现:
- 公共接口(Strategy):定义所支持的算法的公共接口
- 具体实现(ConcreteStrategy):封装了具体的算法或行为
- Context:上下文角色,起承上启下的作用,屏蔽高层对策略、算法的直接访问,维护对Strategy对象的引用
四、代码示例:
一、公共接口:
package com.hezeu.strategy;
/**
* @Classname Strategy
* @Description 公共接口
* @Date 2020/2/26 下午 09:49
* @Created by 朱进博 1724282894@qq.com
*/
public interface Strategy {
public double getPrice(double standardPrice);
}
二、具体实现类:
package com.hezeu.strategy;
/**
* @Classname OldCustomerManyStrategy
* @Description 具体实现类
* @Date 2020/2/26 下午 09:54
* @Created by 朱进博 1724282894@qq.com
*/
public class OldCustomerManyStrategy implements Strategy {
@Override
public double getPrice(double standardPrice) {
System.out.println("打八折");
return standardPrice*0.8;
}
}
三、Context:
package com.hezeu.strategy;
/**
* @Classname Context
* @Description TODO
* @Date 2020/2/26 下午 09:56
* @Created by 朱进博 1724282894@qq.com
*/
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void printPrice(double s){
System.out.println("您该报价:"+strategy.getPrice(s));
}
}‘
五、策略模式的优缺点:
优点:
- 减少了各类算法类与用户之间的耦合度
- 算法可以自由切换
- 扩展性良好,增加一个策略只需要实现一个接口
缺点:
- 策略类型数量会增多,每个策略都是一个类,复用性较小
- 所有策略类都要对外暴露
六、策略模式和简单工厂模式区别:
简单工厂模式:只需要发出命令,由他人实现
策略策略:发出命令并自己实现
Factory是直接船舰详细的对象,并用该对象取运行对应的动作
Strategy将这个操作给Context,没有创建详细对象,实现代码的进一步封装