Java设计模式:策略模式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/sinat_38393872/article/details/97671562

本篇文章是对自己学习的一个总结,学习资料来源是大话设计模式,程杰著,清华大学出版社出版。

很多设计模式都遵从这高内聚,低耦合的理念,策略模式也不例外。

当一个业务在执行时,有不同的执行策略,比如促销活动,可以打折,可以满减,也可以满到一定的金额换购商品,这些都是具体的促销行为。在代码中这些具体的促销行为就应该是不同的逻辑代码。简单地从前后端代码来分类,这些应该是属于后端代码,属于业务层。

如果要坚持低耦合的设计理念,那前端在调用促销活动的代码时,应该尽可能简单,最好是只要一句话。

策略模式就是为了满足以上场景的需要,我们先看看策略模式UML图。

Context中声明了Strategy这个抽象类的对象,其中的contextInterface()是供前端调用来执行具体的策略,无论是要执行什么策略,前端都可以统一调用这个方法来执行策略,达到前后端分离的目的。Context类是为了方便前端调用而设计的。Context代码如下。

public class Context{
    private Strategy strategy;
    //Context的构造函数,传进具体的Strategy,就能得到具体的执行策略
    public Context() {Strategy strategy) {
        this.strategy = strategy;
    }
    
    //前端传进具体的Strategy,然后统一调用该方法,而不用根据策略的不同调用的方法名也不同
    public static void contextInterface(){
        strategy.algorithmInterface();
    }
}

Strategy类代码如下

public abstract class Strategy{
    public abstract void AlgorithmInterface();
}

具体的策略类继承Strategy,代码如下;

扫描二维码关注公众号,回复: 7194143 查看本文章
public class ConcreteStrategyA{
    public void algorithmInterface(){
        //定义具体的策略
    }
}

这些设计,在前端的代码无论使用什么策略,可以以统一的形式写出来,代码如下

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

最后再总结一下,策略模式就是为了让前端可以以统一的代码调用不同的策略方法。这些策略方法应该是一个抽象策略的具体实施,如刚才举例的促销活动是抽象的策略,而打折,满减等式具体的策略行为。

其实策略还可以优化一下,代码中获取具体的策略类,可以通过工厂方法获得,关于工厂可以看我的另一篇文章。

https://blog.csdn.net/sinat_38393872/article/details/94738356

猜你喜欢

转载自blog.csdn.net/sinat_38393872/article/details/97671562