策略模式示例代码(二)

例子来源:《设计模式之禅》——第18章 策略模式
策略模式示例代码(二)_第1张图片
Context封装角色Strategy抽象策略角色ConcreteStrateg具体策略角色

Strategy

public interface Strategy {
    void doSomething();
}

ConcreteStrategyA

public class ConcreteStrategyA implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("具体策略A的运算法则");
    }
}

ConcreteStrategyB

public class ConcrteteStrategyB implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("具体策略2的运算法则");
    }
}

Context

public class Context {
    private Strategy  strategy = null;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void doAnything(){
        this.strategy.doSomething();
    }
}

Client

public class Client {
    public static void main(String[] args) {
        Strategy strategy = new ConcreteStrategyA();
        Context context = new Context(strategy);
        context.doAnything();
    }
}
output:
具体策略A的运算法则

策略模式的优点

  • 算法可以自由切换
  • 避免使用多重条件判断
  • 扩展性良好

策略模式的缺点

  • 策略类数量增多
  • 所有的策略类都需要对外暴露

你可能感兴趣的:(设计模式)