zoukankan      html  css  js  c++  java
  • 策略模式 The Strategy pattern

    • 软件开发的一个不变真理是:change!
    • 库与框架无法帮助我们将应用组织成容易理解、容易维护、具有弹性的架构,所以需要设计模式

    策略模式

         定义了算法族,分别封装起来(封装在一组类中,可以被轻易的扩充与改变),让它们之间可以相互替换。

    此模式让算法的改变独立于使用算法的客户。

    设计原则

    1、“封装变化”。找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码放在一起。

    2、针对接口编程,而不是针对实现编程。

    3、对用组合,少用继承。

    (组合是运行时动态调用,可以在运行时动态改变行为,因为我们可以更换不同的实现。

    继承是编译时静态决定了的)

    组 合 、继 承 对比

    1、组合(优点):不破坏封装,整体类与局部类之间松耦合,彼此相对独立

          继承(缺点):破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性

    2、组合(优点):具有较好的可扩展性

          继承(缺点):支持扩展,但是往往以增加系统结构的复杂度为代价

    3、组合(优点):支持动态组合。在运行时,整体对象可以选择不同类型的局部对象

          继承(缺点):不支持动态继承。在运行时,子类无法选择不同的父类

    4、组合(优点):整体类可以对局部类进行包装,封装局部类的接口,提供新的接口

          继承(缺点):子类不能改变父类的接口

    5、组合(缺点):整体类不能自动获得和局部类同样的接口

          继承(优点):子类能自动继承父类的接口

    6、组合(缺点):创建整体类的对象时,需要创建所有局部类的对象

          继承(优点):创建子类的对象时,无须创建父类的对象

    类图

    以《Head First Design Patterns》中鸭子为例。

    (转载请注明出处 ^.^)

  • 相关阅读:
    无预挖无ICO-潜力币XDAG最强攻略
    DAG也许是真正的区块链3.0
    k-means+python︱scikit-learn中的KMeans聚类实现( + MiniBatchKMeans)
    使用sklearn进行K_Means聚类算法
    机器学习sklearn19.0聚类算法——Kmeans算法
    线性判别分析LDA原理总结
    LNMP V1.4一键快速部署Let's Encrypt免费SSL证书
    LNMP 1.x升级到LNMP 1.4教程及注意事项和多PHP版本使用教程
    Config Server高可用
    Config非对称加解密
  • 原文地址:https://www.cnblogs.com/windlaughing/p/2989136.html
Copyright © 2011-2022 走看看