zoukankan      html  css  js  c++  java
  • 设计模式入门(目的、原则、分类)

    设计模式的目的

    编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重
    用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好
    1) 代码重用性 (即:相同功能的代码,不用多次编写)
    2) 可读性 (即:编程规范性, 便于其他程序员的阅读和理解)
    3) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)
    4) 可靠性(即:当我们增加新的功能后,对原来的功能没有影响)
    5) 使程序呈现高内聚,低耦合的特性

    在面向对象的程序的设计和开发过程中时,有七个原则非常重要,此外还有一个法则我们应该尽量去遵守它。

    1、单一职责原则(SRP,The Single Responsibility Principle)

    一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。


    2、开放封闭原则(OCP,The Open Closed Principle)

    开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。


    3、里氏替换原则(LSP,The Liskov Substitution Principle)

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

    (子类可以替换父类并且出现在父类能够出现的任何地方, 在这个原则中父类应尽可能使用接口或者抽象类来实现)

    里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:

    1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
    2、子类中可以增加自己特有的方法。
    3、当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
    4、当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。


    4、依赖倒置原则(DIP,The Dependency Inversion Principle)

    依赖:在程序设计中,如果一个模块a使用/调用了另一个模块b,我们称模块a依赖模块b。

    高层模块与低层模块:往往在一个应用程序中,我们有一些低层次的类,这些类实现了一些基本的或初级的操作,我们称之为低层模块;另外有一些高层次的类,这些类封装了某些复杂的逻辑,并且依赖于低层次的类,这些类我们称之为高层模块。

    依赖倒置原则的核心思想是面向接口编程,不应该面向实现类编程。
    在实际编程中,要做到下面几点:

    1. 低层模块尽量都要有抽象类或接口,或者两者都有。
    2. 抽象不应该依赖细节,细节应该依赖抽象
    3. 变量的声明类型尽量是抽象类或接口。
    4. 使用继承时遵循里氏替换原则。
    5. 使用接口或抽象的目的是制定规范,而不涉及任何具体的操作,把展现细节的任务交给实现类去完成。


    5、接口分离原则(ISP,The Interface Segregation Principle)

    接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。
    采用接口隔离原则对接口进行约束时,要注意以下几点:

    • 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
    • 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
    • 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。



    6、迪米特法则(LoD,The Law of Demeter、LKP)

    也可以叫 最少知道原则,即是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

    7、合成复用原则

    当要扩展类的功能时,优先考虑使用组合,而不是继承。这条原则在 23 种经典设计模式中频繁使用,如:代理模式、装饰模式、适配器模式等。可见江湖地位非常之高!
    这也是面向对象中的一个重要原则。

    设计原则核心思想:

    1、把可能会变化的部分取出(独立出来)并封装起来,好让其他部分不会受到影响。

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

    3、多个组合,少用继承。

    设计模式的分类

    总体来说设计模式分为三大类:

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    其实还有两类:并发型模式和线程池模式

     

    参考与推荐:

    1、设计模式总结

  • 相关阅读:
    从源码角度看MySQL memcached plugin——3. containers表的管理
    从源码角度看MySQL memcached plugin——2. 线程模型和连接的状态机
    从源码角度看MySQL memcached plugin——1. 系统结构和引擎初始化
    从源码角度看MySQL memcached plugin——0.大纲
    关注博客
    文摘
    MySQL—FTS实现原理介绍PPT
    GIT情况展示说明
    final发布48小时用户调查报告
    final版本发布评价II
  • 原文地址:https://www.cnblogs.com/lisen10/p/11079459.html
Copyright © 2011-2022 走看看