设计原则笔记

来源:互联网 发布:人工智能贴吧 编辑:程序博客网 时间:2024/06/15 17:06

设计原则总共有六个,分别是单一职责原则,开闭原则,依赖倒转,里氏替换,接口隔离,迪米特。

单一职责原则 RSP

如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心就是解耦和增强内聚性。 将不同的职责分离设计开发
就一个类而言,应该仅有一个引起他变化的原因 单一职责原则 在实际开发中经常用到,可以说是一个比较重要的原则

开放 - 封闭原则 Ocp the open close principle

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
开放 : 对于扩展时开放的
封闭 : 对于更改时封闭的
软件实体(类,模块,函数)应该是可扩展的,但是不可修改的
任何的改变都不需要修改原有的代码,而只需要加入一些新的实现,就可以达到目的,这是系统设计的理想境界,但是没有任何一个系统可以做到这一点。
开闭原则的关键在与抽象和多态,二支持抽象和多态关键机制之一时继承 但是不是所有的部分都进行抽象 ,而是对频繁发生变化的部分作出抽象 拒绝不成熟的抽象
用抽象构建框架,用细节实现扩展

依赖倒转原则

抽象不应该依赖细节,细节应该依赖于对象。。 要针对接口编程,不要对实现编程
A 高层模块不应该依赖低层模块,两个都应该依赖抽象
B:抽象不应该依赖细节,细节应该依赖抽象
低层模块尽量都要有抽象类或接口,或者两者都有。
变量的声明类型尽量是抽象类或接口。
使用继承时遵循里氏替换原则。
依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。在开发中面向接口编程是经常使用到的。

LisKov 里氏替换原则 LSP

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

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

接口隔离原则

接口最小化原则,强调的是一个接口拥有的行为应该尽可能的小。
接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少
采用接口隔离原则对接口进行约束时,要注意以下几点
接口尽量小,但不能太小。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。

为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

迪米特法则

定义:一个对象应该对其他对象保持最少的了解。
最小知道原则,即一个类应该尽量不要知道其他类太多的东西,不要和陌生的类有太多接触。
如果一个类知道或者说是依赖于另外一个类太多细节,这样会导致耦合度过高,应该将细节全部高内聚于类的内部,其他的类只需要知道这个类主要提供的功能即可。
尽可能将一个类的细节全部写在这个类的内部,不要漏出来给其他类知道,否则其他类就很容易会依赖于这些细节,这样类之间的耦合度就会急速上升,这样做的后果往往是一个类随便改点东西,依赖于它的类全部都要改。

原创粉丝点击