设计模式总结(2)
策略模式
如果写了一个接口的多个实现类,而这些实现类功能相似,这个时候若还使用传统的类似if…else…的方法进行判断,其效率会非常低下。可以将这些功能相似的实现类封装起来,使它们可以相似替换。这就是策略模式。
策略模式是一种行为型模式,类的行为或者算法可以在运行时更改。
抽象策略
通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。
interface Strategy {
public void doSomeThing();
}
具体策略
具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自由替换。
class ConcreteStrategy1 implements Strategy {
@Override
public void doSomeThing() {
System.out.println("具体策略1");
}
}
class ConcreteStrategy2 implements Strategy {
@Override
public void doSomeThing() {
System.out.println("具体策略2");
}
}
封装类
也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void execute() {
strategy.doSomeThing();
}
}
测试
public class Client {
public static void main(String[] args){
Context context;
System.out.println("-----执行策略1-----");
context = new Context(new ConcreteStrategy1());
context.execute();
System.out.println("-----执行策略2-----");
context = new Context(new ConcreteStrategy2());
context.execute();
}
}