iOS面向对象设计原则

西门桃桃 2021-12-25 PM 863℃ 1条

SOLID原则:

简写全称中文名
SSingle Responsibility Principle单一职责原则
OOpen Close Principle开闭原则
LLiskov Substitution Principle里氏替换原则
IInterface Segregation Principle接口隔离原则
DDependence Inversion Principle依赖倒置原则
LLaw Of Demeter/Least Knowledge Principle迪米特/最少知识原则
CComposite/Aggregate Reuse Principle CARP组合/聚合复用原则

前面五种被称为面向对象设计中常用的SOLID原则。

1、单一职责原则(Single Responsibility Principle, SRP): There should never be more than one reason for a class to change.

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

使用:

一个类仅负责一项职责,当一个职责发生改变,需要修改时,不会影响到另一个职责,实现“高内聚,低耦合”。

2、开闭原则(Open-Closed Principle, OCP): Software entities like classes, modules and functions shoule be open for extension but closed for modifications.

定义: 一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

使用:

在现有的业务逻辑基础上增加新的需求时,通过扩展已有的代码来实现。

3、里氏代换原则(Liskov Substitution Principle, LSP): Let Φ(x) be a property provable about objects x of type T. Then Φ(y) should be true for objects y of type S where S is a subtype of T.

定义: 所有引用基类(父类)的地方必须能透明地使用其子类的对象。

使用:

在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

具体使用:

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

4、接口隔离原则(Interface Segregation Principle, ISP): The dependency of one class to another one should depend on the smallest possible interface.

定义: 接口中的方法应该尽量少,不要使接口过于臃肿,不要有很多不相关的逻辑方法。

使用:

  • 根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
  • 接口仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。
  • 在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。一般而言,接口中仅包含为某一类用户定制的方法即可,不应该强迫客户依赖于那些它们不用的方法。

5、依赖倒置原则(Dependency Inversion Principle, DIP): High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.

定义: 抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

使用:

提取公共的抽象类,具体的实现类去继承抽象类所产生的类(实现接口)。

6、迪米特法则(Law of Demeter, LoD): Don’t talk to strangers!

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

使用:

一个类应该对其耦合的其他类或所调用的类知道得最少。所耦合的类内部无论如何复杂,怎么实现的我都不需要知道,我只调用你public出来的这些方法,其他都不用知道。

7、组合复用原则(Composite Reuse Principle, CRP): Classes should achieve polymorphic behavior and code reuse by their composition rather than inheritance from a base or parent class.

定义: 尽量使用对象组合,而不是继承来达到复用的目的。

使用:

在面向对象设计中,可以通过两种方法复用已有的设计和实现:组合or继承,但首先应该考虑使用组合,组合可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂度`,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。

标签: 设计原则

非特殊说明,本博所有文章均为博主原创。

评论啦~



唉呀 ~ 仅有一条评论


  1. 张景鹤
    张景鹤

    真不错。学习了!

    回复 2022-01-24 16:31