策略模式
<设计模式其实很简单>笔记
策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。
//抽象策略类
public abstract class Strategy{
public abstract void Algorithm();
}
//上下文
public class Context{
Strategy strategy ;
//构造函数
public Context(Strategy strategy){
this.strategy = strategy ;
}
//上下文操作
public void ContextOperation(){
this.strategy.Algorithm();
}
}
//具体的策略A
public class ConcreteStrategyA extends Strategy{
//覆盖父类的抽象方法
//定义算法
@Override
public void Algorithm(){
System.out.println("the operation of strategy A!");
}
}
//具体的策略B
public class ConcreteStrategyB extends Strategy{
//覆盖父类的抽象方法
//定义算法
@Override
public void Algorithm(){
System.out.println("the operation of strategy B!");
}
}
//客户端
public static void main(String[] args){
Context context;
context = new Context(new ConcreteStrategyA);
context.ContextOperation();
context = new Context(new ConcreteStrategyB);
context.ContextOperation();
}
//策略模式降低了算法类和使用算法的类之间的耦合。
//策略可以自由替换,且当新的策略出现时,只需再添加一个类。
③适用的地方:
很多相关的类只是在行为上有差异
当需要使用一个算法的不同变体时
使用算法的客户不应该知道算法的具体结构时
当一个类定义了多种行为并且这些行为在这个类的操作中以多个条件语句的形式出现时