Categories
不学无术

面向对象软件设计的S.O.L.I.D原则

具体示例请看原文:S.O.L.I.D: The First 5 Principles of Object Oriented Design
S.O.L.I.D 代表着:
S – Single-responsiblity principle 单一责任原则
一个类应有且仅有一个理由去变更,即一个类只应用于一个工作。
O – Open-closed principle 开闭原则
对象或实体只应该开放扩展,而不该开放修改。
我的理解是应该避免越俎代庖的事情发生,不应该在调用某类实体的地方去关心某个对象该方法的具体实现。例如有两个Shape类的继承类Circle及Square,在对各自计算面积的时候,具体计算面积的方法不是调用者需要关心的,否则每增加一种继承类都要去修改调用方法。
L – Liskov substitution principle 李斯柯夫替代原则
令q(x)是关于类型T的对象x的可证明属性。那么对于T的子类型S的对象y,q(y)也应该是可证明的。
这个是官话,简单来说就是每个子类都应该可替代他们的父类,所谓“子承父业”。
I – Interface segregation principle 接口分离原则
永远不应该强迫用户实现它不使用的接口,或不应该强迫用户依赖于他们不使用的方法。
比如不应该让一个二维平面的类去实现一个计算体积的方法。
D – Dependency Inversion Principle 依赖倒置原则
实体必须依赖于抽象,而不是具象。高级别的模块不能依赖于低级别模块,而是需要依赖于某种抽象。
比如一个Gateway类需要通过某种网络IO接收数据,它应该依赖于一种IO接口的抽象而不是具体的某种IO(比如UDP IO),否则当你想换一种IO做同样的事情时你就会很头疼。