• 简述23种设计模式


    总体来说设计模式分为三大类:
    创建型模式,共五种:工厂方法模式、抽象工厂模式单例模式建造者模式、原型模式。
    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
    其实还有两类:并发型模式和线程池模式。

    设计模式的本质是面向对象方法的实际运用。具体而言,是封装、继承、多态和关联的反复使用。可以说,现在市面上关于设计模式的书没有一本是适合初学者的。

    感觉真正理解什么是设计模式,就是要透彻理解OO的四大要素:封装、继承、多态和关联。其中核心是封装的概念。 

    设计模式之六大原则

    开闭原则(Open Close Principle)

    1988年,勃兰特·梅耶(Bertrand Meyer)在他的著作《面向对象软件构造(Object Oriented Software Construction)》中提出了开闭原则,它的原文是这样:“Software entities should be open for extension,but closed for modification”。

    • 意思:软件模块应该对扩展开放,对修改关闭。
    • 举例:在程序需要进行新增功能的时候,不能去修改原有的代码,而是新增代码,实现一个热插拔的效果(热插拔:灵活的去除或添加功能,不影响到原有的功能)。
    • 目的:为了使程序的扩展性好,易于维护和升级。
    • 意思:里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
    • 举例:球类,原本是一种体育用品,它的衍生类有篮球、足球、排球、羽毛球等等,如果衍生类替换了基类的原本方法,如把体育用品改成了食用品(那么软件单位的功能受到影响),就不符合里氏代换原则。
    • 目的:对实现抽象化的具体步骤的规范。
    • 意思:针对接口编程,而不是针对实现编程。
    • 举例:以计算机系统为例,无论主板、CPU、内存、硬件都是在针对接口设计的,如果针对实现来设计,内存就要对应到针对某个品牌的主板,那么会出现换内存需要把主板也换掉的尴尬。
    • 目的:降低模块间的耦合。
    • 使用多个隔离的接口,比使用单个接口要好。
    • 举例:比如:登录,注册时属于用户模块的两个接口,比写成一个接口好。
    • 目的:提高程序设计灵活性。

    里氏代换原则(Liskov Substitution Principle)

    依赖倒转原则(Dependence Inversion Principle)

    接口隔离原则(Interface Segregation Principle)

    迪米特法则(最少知道原则)(Demeter Principle)

    1987年秋天由美国Northeastern University的Ian Holland提出,被UML的创始者之一[Booch]等普及。后来,因为在经典著作《 The Pragmatic Programmer》而广为人知。

    • 意思:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
    • 举例:一个类公开的public属性或方法越多,修改时涉及的面也就越大,变更引起的风险扩散也就越大。
    • 目的:降低类之间的耦合,减少对其他类的依赖。

    单一职责原则( Single responsibility principle )

    该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。

      • 意思:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
      • 举例:该原则意思简单到不需要举例!
      • 目的:类的复杂性降低,可读性提高,可维护性提高。
  • 相关阅读:
    每日一题 为了工作 2020 0412 第四十一题
    每日一题 为了工作 2020 04011 第四十题
    每日一题 为了工作 2020 0410 第三十九题
    每日一题 为了工作 2020 0409 第三十八题
    每日一题 为了工作 2020 0408 第三十七题
    每日一题 为了工作 2020 0407 第三十六题
    每日一题 为了工作 2020 0406 第三十五题
    每日一题 为了工作 2020 0405 第三十四题
    学习总结(二十四)
    学习总结(二十三)
  • 原文地址:https://www.cnblogs.com/paul-3/p/5994724.html
Copyright © 2020-2023  润新知