【策略模式】—— 灵活的算法集

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pro_Vinny/article/details/81838662

策略模式,定义与封装了一系列的算法,并能相互间进行替换,且独立于使用者进行变化。

一、关键点

1)先看下这个模式点关键点:

算法集: 该模式根据业务定义了一系列的算法,进行了特殊的封装,相互间能相互替换,并能进行灵活的拓展;

独立变化:该模式的一个比较明显的特点就是独立于客户端的变化,而不依赖与客户端,灵活地进行升级与策略实现。

2)我们再来看下它的类图关系:

Context:操作策略的上下文;

Strategy:策略的抽象类;

ConcreteStrategy:策略的具体实现。

二、实现

2.1 策略抽象类Stragety

public abstract class Strategy {

    abstract void algorithm();
}

2.2 策略具体实现ConcreteStragety

public class ConcreteStrategyA extends Strategy {

    @Override
    void algorithm() {
        /** Strategy of 'A' */
    }
}



public class ConcreteStrategyB extends Strategy {

    @Override
    void algorithm() {
        /** Strategy of 'B' */
    }
}

2.3 策略操作的上下文Context

public class Context {
    private Strategy mStrategy;

    public Context(Strategy strategy) {
        mStrategy = strategy;
    }

    public void algorithmInterface() {
        mStrategy.algorithm();
    }
}

2.4 客户端对象Client

public class Client {

    public static void main(String[] args) {
        Context context;

        context = new Context(new ConcreteStrategyA());
        context.algorithmInterface();

        context = new Context(new ConcreteStrategyB());
        context.algorithmInterface();
    }
}

三、小结

3.1 解耦。该模式以算法集的形式,将原来有与客户端的依赖关系独立开来,结构更清晰、拓展更加方便;

3.2 独立变化。由于进行了解耦,算法就能独立于客户端进行需要的变化,更加灵活;

3.3 开闭原则。这个模式也很好地体现了开闭原则,根据业务的变化,直接进行拓展即可,而不用影响到原有的算法集。

猜你喜欢

转载自blog.csdn.net/Pro_Vinny/article/details/81838662