随笔分类
行为型模式
策略模式
Strategy
行为模式之一
对一系列的算法加以封装,为所有的算法定义一个抽象的算法接口,并且通过继承该抽象算法对所有的算法加以封装和实现,具体的算法选择由客户端来选择(策略)
Strategy模式主要用来平滑地处理算法的切换
public interface Strategy {
void encrypt();
}
public class Md5Strategy implements Strategy{
@Override
public void encrypt() {
System.out.println("MD5加密...");
}
}
public class Sha1Strategy implements Strategy{
@Override
public void encrypt() {
System.out.println("Sha1加密....");
}
}
public class Context {
private Strategy strategy; //保留一个引用
public Context(Strategy strategy) { //维护引用
this.strategy = strategy;
}
public void encrypt(){
strategy.encrypt();
}
}
public class MainClass {
public static void main(String[] args) {
Context context = new Context(new Md5Strategy());
context.encrypt();
}
}
评价:
优点
-
策略模式提供了管理相关算法族的办法。
-
策略模式提供了可以替换继承关系的办法
继承使得动态改变算法或行为变得不可能
-
策略模式避免了使用多重条件转移语句.
缺点:
-
策略模式只适合客户端知道所有的算法或行为的情况
-
策略模式会造成很多的策略类
有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样的策略类实例可以被不同客户的使用
(可以用享元模式进行优化)