六大设计原则SOLID
单一职责原则:Single Responsibility Principle
开闭原则:Open Closed Principle
里氏替换原则:Liskov Substitution Principle
迪米特法则:Law of Demeter
接口隔离原则:Interface Segregation Principle
依赖倒置原则:Dependence Inversion Principle
单一职责原则:Single Responsibility Principle
一个类只应承担一种责任。比如
开闭原则:Open Closed Principle
实体应该对扩展是开放的,对修改是封闭的。即,可扩展(extension),不可修改(modification)。将经常会修改的点以扩展点的方式开放出来,保证每次需求不改老代码。策略模式是比较好的实现
举例
一个商户接入了多个付款方式,如支付宝和微信支付
里氏替换原则:Liskov Substitution Principle
一个对象在其出现的任何地方,都可以用子类实例做替换,并且不会导致程序的错误。换句话说,当子类可以在任意地方替换基类且软件功能不受影响时,这种继承关系的建模才是合理的。
举例
经典的例子: 正方形不是长方形的子类。原因是正方形多了一个属性“长 == 宽”。这时,对正方形类设置不同的长和宽,计算面积的结果是最后设置那项的平方,而不是长*宽,从而发生了与长方形不一致的行为。如果程序依赖了长方形的面积计算方式,并使用正方形替换了长方形,实际表现与预期不符。
迪米特法则:Law of Demeter
一个对象应该对其他对象有最少的了解,如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
该原则也很好理解,我们在写一个类的时候,应该尽可能的少暴露自己的接口。什么意思呢?就是说,在写类的时候,能不 public 就不 public ,所有暴露的属性或是接口,都是不得不暴露的,这样的话,就能保证其他类对这个类有最少的了解了
接口隔离原则:Interface Segregation Principle
客户(client)不应被强迫依赖它不使用的方法。即,一个类实现的接口中,包含了它不需要的方法。将接口拆分成更小和更具体的接口,有助于解耦,从而更容易重构、更改
依赖倒置原则:Dependence Inversion Principle
应该尽可能的依赖接口,不要依赖实现