模式又叫策略模式
是指对一系列算法进行封装, 为所有算法定义一个抽象的算法接口.
并通过继承该抽象算法接口, 对所有的算法加以封装和实现.
—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
—具体策略角色:包装了相关的算法和行为。
—环境角色:持有一个策略类的引用,最终给客户端调用。
具体应用场景:
定义出行方案: 飞机, 汽车, 轮船
定义票价打折: 儿童票, 学生票, 会员票,
常见实现方式:
1. 新建一个接口 策略类
public interface Strategy {
//加密
public void entcpy();
}
2. 新建MD5加密 策略角色
public MD5Strategy implement Strategy {
public void entcpy(){
//实现方式
}
}
3.新建MDS加密 策略角色
public MDSStrategy implement Strategy {
public void entcpy(){
//实现方式
}
}
4. main函数调用
if(**){
Strategy stra = new MDSStrategy();
} else {
Strategy stra = new MD5Strategy();
}
stra.encrypt();
弊端:
1.如果选项太多的时候, if else 过多
2. 如果实现方法不同, 比如传递的值, 返回值不同, 无法实现重载
解决方案:
1.加入一个环境角色
public class Context {
private Strategy strategy ;
public Context (Strategy strategy) {
this.strategy = strategy;
}
public void encrypt () {
this.strategy.encrypt();
}
}
2. main函数调用
Context context = new Context (new MD5Strategy());
Context.encrypt();
角色和职责
Strategy : 策略(算法)抽象
ConcreteStrategy : 各种策略(算法)的具体实现
Context : 策略的外部封装类, 或者容器类, 根据不同的策略,执行不同的行为.