一、原理

对一系列算法进行封装,并定义一个抽象的接口,通过继承来对算法进行封装和实现,把算法的选择权交给客户端,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、缺点

客户端必须知道所有的策略类,并自行决定使用哪个类。