美文网首页达叔的朋友圈们
大话设计模式读书笔记-2策略模式

大话设计模式读书笔记-2策略模式

作者: QuietHeart | 来源:发表于2020-03-03 10:31 被阅读0次

第2章 商场促销——策略模式

概念

策略模式定义算法家族,分别封装后,让它们可相互替换,此模式可以让使用算法的用户不会因算法的变化而受到影响。

实现

  • 策略抽象类(Strategy): 定义所有算法公共抽象接口(AlgorithmInterface())
  • 具体策略(ConcreteStrategyXX): 继承策略抽象类,实现具体接口(AlgorithmInterface())
  • 上下文类(Context): 用其直观的子类ConcreteContext来配置,维护对Stratety的引用,其中有直观的接口(ContextInterface)让客户端调用。
  • 客户端类: 创建具体算法对象,算法对象传入上下文类,通过上下文类操作算法对象。

这里,Strategy相当于前面简单工厂模式中的Operate类,但是Context类不是简单工厂类,而是另外一个客户端调用的类,客户端不直接调用算法的接口,而是通过Context定义的直观的方式来调用算法。

实现图示:

使用方式:

作用

参照简单工厂模式进行总结一下。

  • 简单工厂模式封装了对象的创建,但并没有封装对象类的概念。客户端还需知道有父类和子类这个东西(尽管不用知道具体子类),这样对客户的专业性要求耦合度更高了。
  • 策略模式,也是将不同算法用不同子类实现,算法公共接口在父类中。不同的是,另外创建一个Context类,这个Context类负责通过一个直观的Context方法名间接调用对应算法对象中的公共的方法。

与简单工厂模式的区别是,它封装了对象类的概念,客户端不用知道算法的父亲类以及算法的具体方法了,通过一个直观易理解的Context和对应的Context方法名就行。

另外,策略模式还是需要创建子算法对象的分支放到客户端调用过程中的,那样可以与工厂模式结合,将Factory类也放到Context类中,这样客户端也像工厂模式一样,不用选择类对象,子类对象的创建在Context的分支内部中就已经实现了。即,这时的Context同时完成了工厂模式的对象创建,以及封装了对象类的概念。

采用了策略模式+简单工厂模式后,代码类似,但含义层次已然不同:
(1)工厂模式中,还需要知道具体算法的大致接口、以及算法父类。
(2)而结合了策略模式,只需要知道一个直观的Context类,以及易理解的接口(如GetResult),无需知道是什么类、什么方法。

相关文章

  • iOS开发之设计模式 - 策略模式

    由《大话设计模式 - 策略模式》的OC和部分Swift的语言转义 策略模式 继上一篇《简单工厂模式》 策略模式,定...

  • 策略模式

    对《大话设计模式》的学习总结,以备后用。 什么是策略模式? 《大话设计模式》的解释: 它定义了算法家族,将算法分布...

  • 大话设计模式读书笔记-2策略模式

    第2章 商场促销——策略模式 概念 策略模式定义算法家族,分别封装后,让它们可相互替换,此模式可以让使用算法的用户...

  • Design Patterns Talk - Strategy

    《大话设计模式》第 2 章 - 策略模式 的 Swift 实现。 问题 做一个商场收银软件,根据不同促销方案返回不...

  • 大话设计模式——策略模式

    结合那个计算机那篇的末尾看~~~ 策略就是根据不同条件,选择对应的策略,和简单工厂模式很像,区别在于这个策略类持有...

  • 大话设计模式——策略模式

  • 大话设计模式-策略模式

    大话设计模式的例子都是用C#写的,对于熟悉其他语言的开发者来说,看起来可能不是那么的方便。为了加深理解,我在学习策...

  • 大话设计模式-策略模式

    窗口展示 策略模式的金额计算 策略模式的优缺点: 策略模式定义了一系列算法,这些算法功能相同,实现不同,可以采用相...

  • iOS开发之设计模式 - 装饰模式

    由《大话设计模式 - 装饰模式》的OC和部分Swift的语言转义 装饰模式 继上一篇《策略模式》[https://...

  • iOS开发之设计模式 - 装饰模式

    由《大话设计模式 - 装饰模式》的OC和部分Swift的语言转义 装饰模式 继上一篇《策略模式》 装饰模式,动态地...

网友评论

    本文标题:大话设计模式读书笔记-2策略模式

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