面向对象的设计原则(设计模式中的7板斧)

  设计模式中总共有23中基本的设计模式,让我们了解如何去“封装变化”,“对象间松散耦合”,“针对接口编程”,从而去设计出易维护、易扩展、易复用、灵活性好的程序。不过,也有7种规范我们行为的原则:

  • 单一职责原则
  • 开放封闭原则
  • 里氏代换原则
  • 依赖倒转原则
  • 迪米特法则
  • 合成聚合原则
  • 接口隔离原则

一、单一职责原则

1.单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。

2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时,设计会遭到严重性的破坏。

3.软件设计真正要做的许多内容,就是发现职责并把那些职责互相分离。如果你能想到多于一个动机去改变一个类,那么这个类就具备多个职责,这是就应该去分离类的职责。

二、开放封闭原则

1.开放封闭原则(ASD):软件实体(类、模块、函数等等)应该可以扩展,但不可以修改。换句话说就是,对于扩展是开放的,对于修改是封闭的。

2.在设计出系统后可以保持稳定,从而使得系统可以在第一个版本以后(以之前版本为基础)不断推出新的版本。

3.无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。这就要求设计人员寻找到最有可能变化的位置,然后构造抽象来隔离那些变化。

4.对于应用程序中的每个部分都刻意的进行抽象并不是一个好的主意,拒绝不成熟的抽象和抽象本身一样重要。

三、里氏代换原则

1.里氏代换原则(LSP):子类型必须能替换掉它们的父类型(在软件里,把父类都替换为它的子类,程序的行为没有变化)——使开放封闭称为可能。

2.子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

四、依赖倒转原则

1.依赖倒转原则(ASD):高层模块不应该依赖于底层模块,两个都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。(依赖于抽象,而不依赖于具体)

2.针对接口编程,不要对实现编程。

3.依赖倒转可以说是面向对象的标志,如果编写时考虑的都是如何针对抽象变成而不是针对细节编程,那这就是面向对象的设计。

五、迪米特法则

1.迪米特法则(LoD):如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的方法的话,可以通过第三者转发这个调用。

2.根本思想是强调类之间的松耦合。

3.类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及。

六、合成聚合原则

1.合成聚合原则(CARP):在一个新的对象里面使用已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的。

2.新对象对组成对象的内部实现不知,每个新对象可以将功能聚集在一个点上,可以在运行时动态更新,动态的引用与组成对象类型相同的对象。

3.要尽量使用合成聚合,而不是继承关系达到复用的目的。

七、接口隔离原则

1.接口隔离原则(ISP):使用多个专门的接口比使用单一的总接口要好。

2.一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

3.一个类对另外一个类的依赖性应当是建立在最小的接口上。

猜你喜欢

转载自blog.csdn.net/qq_43238335/article/details/106127671