一、原理
对一系列算法进行封装,并定义一个抽象的接口,通过继承来对算法进行封装和实现,把算法的选择权交给客户端,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、缺点
客户端必须知道所有的策略类,并自行决定使用哪个类。