一、原理
对一系列算法进行封装,并定义一个抽象的接口,通过继承来对算法进行封装和实现,把算法的选择权交给客户端,strategy模式主要用来平滑的处理算法之间的切换。
二、源代码示例
//定义接口,通过该接口选择算法
public interface Strategy {
//加密的方法
public void entcpy();
}
-----------------------
//接口的实现类
public class MDS implements Strategy{
@Override
public void entcpy() {
System.out.println("执行MDS加密");
}
}
//接口的实现类
public class MD5 implements Strategy{
@Override
public void entcpy() {
System.out.println("执行MD5加密");
}
}
---------------------------------------------
//平滑的处理算法的选择
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy=strategy;
}
public void entcpy(){
this.strategy.entcpy();
}
-----------------------------------------
//算法的选择权交给客户端
public class MainClass {
public static void main(String[] args) {
// Strategy strate=new MD5();
// strate.entcpy();
// Strategy strate1=new MDS();
// strate1.entcpy();
Context context=new Context(new MD5());
context.entcpy();
}
}
三、优势和劣势
1、优势
(1)提供了管理算法族的办法(接口和实现),策略类的等级结构定义了一个算法或者行为族,通过继承将代码移到父类里面,避免了重复代码。
(2)策罗模式提供了可以替代继承关系的办法,继承使动态改变算法或者行为变得不可能
(3)使用策略模式可以避免使用多重条件转移语句
2、缺点
客户端必须知道所有的策略类,并自行决定使用哪个类。