运用面向对象的思想进行软件设计时要遵循的6个基本原则:
(1) 单一职责原则:一个类只负责一项职责。降低代码复杂度,增加可读性可维护性,只有在逻辑足够简单、类中的方法足够少时才可以在代码级别上违反单一职责原则。职责被分解为很多细粒度的职责,程序已经写好的情况下,分解类开销大(分解意味着零散,加载变的复杂,阅读也变得复杂),修改类虽然违反单一职责原则,但是是个不错的选择。
(2) 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。这项原则并不是要避免多态,而是要求子类在继承父类的时候,不能与父类已经定好的契约冲突,也就是不要重写父类已经实现的方法。
LSP原则是:只要父类能出现的地方子类就可以出现,而且替换为子类还不产生任何错误或异常。怎么做到:
子类重载父类方法,方法的前置条件要比父类更宽松
子类实现父类的抽象方法时,方法的后置条件要比父类更严格。
(3) 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。它的核心是面向接口编程。
老师和家长给孩子讲故事,只要给老师和家长一个可读的东西,他们就可以给孩子讲故事了。(Readable、Speaker)。Test-Driven Development开发模式就是依赖倒置原则最成功的应用。
依赖的关系的实现:接口传递、构造方法传递、setter方法传递。
(4) 接口隔离原则:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。
接口尽量小,但是要有限度。
为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。
提高内聚,减少对外交互,writeless methods,do more things.
(5) 迪米特法则:一个对象应该对其他对象保持最少的理解。
类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。迪米特法则就是为了实现低耦合。
怎么在编程中体现:
只与直接的朋友通信,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
(6) 开闭原则:对扩展开放,对修改关闭。
单一职责原则:职责单一。
里氏替换原则:不要破坏继承体系结构。
依赖倒置原则:面向接口编程
接口隔离原则:设计接口时要精简单一。
迪米特原则:降低耦合
者五个原则都是开源原则的注意事项,开闭原则是一切编程的出发点和目的。
设计模式虽好,但是也要有个度,避免过度设计的危险。