策略模式

模式定义

定义一些列的算法,吧他们一个个封装起来,并且使他们克相互替换。本模式使得算法可独立于使用它的客户而变化。

模式结构

模式结构

代码实现

interface Strategy {
    public void doSomething();
}
class ConcreteStrategy1 implements Strategy {
    public void doSomething() {
        System.out.println("具体策略1");
    }
}
class ConcreteStrategy2 implements Strategy {
    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();
        }
    }

模式的优缺点

优点

  1. 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。

  2. 策略模式提供了管理相关的算法族的办法。

  3. 策略模式提供了可以替换继承关系的办法。

  4. 使用策略模式可以避免使用多重条件转移语句。

缺点

  1. 必须对客户端(调用者)暴露所有的策略类,因为使用哪种策略是由客户端来决定的。

  2. 维护各个策略类会给开发带来额外开销,策略模式将造成产生很多策略类。

思考

模式本质:分离算法,选择实现。

开发中的应用场景

  1. 几个类的主要逻辑相同,只在部分逻辑的算法和行为上稍有区别的情况。

  2. 有几种相似的行为,或者说算法,客户端需要动态地决定使用哪一种,那么可以使用策略模式,将这些算法封装起来供客户端调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容