策略模式

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

上一篇下一篇

猜你喜欢

热点阅读