美文网首页
设计模式(二):六大原则

设计模式(二):六大原则

作者: 田永威 | 来源:发表于2017-03-04 16:44 被阅读11次
    向真正的大师学习

    参考:设计模式六大原则
    简书-快速理解-设计模式六大原则
    注意:IoC 也属于设计模式吧。

    设计模式六大原则(1):单一职责原则

    定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

    设计模式六大原则(2):里氏(一个姓里的人提出的)替换原则

    继承包含这样一层含义:父类中凡是已经实现好的方法(相对于抽象方法而言),实际上是在设定一系列的规范和契约,虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改,就会对整个继承体系造成破坏。而里氏替换原则就是表达了这一层含义。

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

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

    设计模式六大原则(3):依赖倒置原则

    传递依赖关系有三种方式,以上的例子中使用的方法是接口传递,另外还有两种传递方式:构造方法传递和setter方法传递,相信用过Spring框架的,对依赖的传递方式一定不会陌生。

    在实际编程中,我们一般需要做到如下3点:

    • 低层模块尽量都要有抽象类或接口,或者两者都有。
    • 变量的声明类型尽量是抽象类或接口。
    • 使用继承时遵循里氏替换原则。
      依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。

    设计模式六大原则(4):接口隔离原则

    接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
    接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

    采用接口隔离原则对接口进行约束时,要注意以下几点:

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

    运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。

    设计模式六大原则(5):迪米特法则

    定义:一个对象应该对其他对象保持最少的了解。

    问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。
    解决方案:尽量降低类与类之间的耦合。

    设计模式六大原则(6):开闭原则

    定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
    问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。
    解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

    一句话概括:

    • 单一职责原则告诉我们实现类要职责单一;
    • 里氏替换原则告诉我们不要破坏继承体系;
    • 依赖倒置原则告诉我们要面向接口编程;
    • 接口隔离原则告诉我们在设计接口的时候要精简单一;
    • 迪米特法则告诉我们要降低耦合。
    • 而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。

    相关文章

      网友评论

          本文标题:设计模式(二):六大原则

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