美文网首页
策略模式

策略模式

作者: 忘净空 | 来源:发表于2016-08-18 16:32 被阅读21次

    模式定义

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

    模式结构

    模式结构

    代码实现

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

    相关文章

      网友评论

          本文标题:策略模式

          本文链接:https://www.haomeiwen.com/subject/hsbvsttx.html