Skip to content

Instantly share code, notes, and snippets.

@sunwei
Created March 12, 2020 03:47
Show Gist options
  • Save sunwei/701e464eaf54f7643591c838e0dd395c to your computer and use it in GitHub Desktop.
Save sunwei/701e464eaf54f7643591c838e0dd395c to your computer and use it in GitHub Desktop.
从OO(Object Oriented)五大原则解读而向对象编程核心理念 - 高内聚,低耦合

从OO(Object Oriented)五大原则解读而向对象编程核心理念 - 高内聚,低耦合

S - Single Responsibility principle - 单一职责原则

只做一件事。但什么是一件事,就变成了一个度的问题。建议结合职责来看,单一职责,也就是我对自己的职责有明确的定义。 比如我只做分发,我只做计算,我只较验输入,我只负责组装返回。职责清楚了,才能保证高效合作,方便维护。

可以看出单一职责原则是对自己的要求,要求自己对自己的职责认识清晰,更多体现了高内聚

O - Open-closed principle - 开闭原则

对拓展开放,对修改关闭。为什么对修改关闭?这个很容易找到答案,因为大家都不想新需求来的时候,改很多代码,甚至是重写。 为什么对拓展开放?结合关闭来看,就是新的需求来时,如果可以通过拓展,就能很方便的实现需求,是不是团队都会很开心。

开闭原则也是对自己的要求,要求设计对象的时候,能够方便进行拓展,而不是重写,更多体现了高内聚

L - Liskov substitution principle - 李氏替换原则

任何基类出现的地方,子类一定可以出现。描述的是继承关系,可用来衡量继承的质量。如果基类出现的地方,子类不能出现。 那说明子类不具备基类的功能,也就是并没有完全实现基类,那是否应该考虑一下是不是亲生的,要不要滴个血?子类可以,也应该具 有自己的个性,重写或新增一些基类的方法,但不能继承了又不实现。应了那句俗话:"你大爷还是你大爷"。

李氏替换原则,是要求自己在认祖归宗的时候,首先要认准,其次是要有契约精神,说话算数。也是对自己的要求,更多体现了高内聚

I - Interface segregation principle - 接口隔离原则

"Segregation"是隔离,"Segregation of duty"就是分工。一个对象要对外提供不同的服务,但这些服务不是所有的用户都需要。 张三要存钱,李四要取钱。银行会开设不同的窗口,提供对应的服务。这些服务窗口服务就是银行提供的接口服务。我们隔离的不是用户, 而是我们提供的服务,在定义接口的时候,不能给一张大而全的,让用户自己选,而是针对不同的用户提供量身定制的接口。 接口的本意就是为了用户。

接口隔离是站在其它对象的角度,为其它对象提供最合适的服务。属于对象与对象之间沟通的规则和文化,更多体现了低耦合

D - Dependency Inversion Principle - 依赖倒置原则

依赖倒置的描述为:高层模块不应该依赖底层模块,两者都应该依赖抽象。高层通常指的是靠近用户的一层,也就是调用方。低层常指靠近机器的地方, 也就是被调用方。比如用户想要发短信,是需求提出方,基础设施层提供这个功能就行了,至于你用电信发还是联通发,用户可能并不关心。这就需要 服务调用方和服务提供方,提前商量好服务的接口,抽象出提供服务的方式,而不是实现细节。

依赖倒置是站在需求方和服务方的角度,提供的合作理念。属于对象与对象之间沟通的规则和文化,更多体现了低耦合

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment