策略模式
策略模式(Strategy)
策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有算法加以封装和实现,具体的算法选择交给客户端决定。策略模式主要用来平滑地处理算法的切换。
1. 策略模式的角色及其职责
1.1 策略(Strategy)
策略(算法)的抽象。
Encrypt
package com.liuyao;
/**
* @author liuyao
* @date 2018/07/31
*/
public interface Encrypt {
public void doEncrypt();
}
1.2 具体策略(ConcreteStrategy)
各种策略(算法)的具体实现
MD5Encrypt
package com.liuyao;
/**
* @author liuyao
* @date 2018/07/31
*/
public class MD5Encrypt implements Encrypt {
@Override
public void doEncrypt() {
System.out.println("MD5 Encrypt");
}
}
AESEncrypt
package com.liuyao;
/**
* @author liuyao
* @date 2018/07/31
*/
public class AESEncrypt implements Encrypt {
@Override
public void doEncrypt() {
System.out.println("AES Encrypt");
}
}
1.3 容器(Context)
策略的外部封装类(容器类),根据不同策略执行不同的行为。策略由外部环境决定。
Context
package com.liuyao;
/**
* @author liuyao
* @date 2018/07/31
*/
public class Context {
private Encrypt encrypt;
public Context(Encrypt encrypt) {
this.encrypt = encrypt;
}
public void doEncrypt(){
this.encrypt.doEncrypt();
}
}
Main
package com.liuyao;
public class Main {
public static void main(String[] args) {
Context md5Context=new Context(new MD5Encrypt());
md5Context.doEncrypt();
Context aesContext=new Context(new AESEncrypt());
aesContext.doEncrypt();
}
}
// MD5 Encrypt
// AES Encrypt
2. 优缺点
2.1 优点
- 提供了管理相关的算法族的办法
- 提供了可以替换继承关系的办法
- 使用策略模式可以避免使用多重条件转移语句
2.2 缺点
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略
- 策略模式造成很多策略策略类。