设计原则是基本的工具,应用这些规则可以使你的代码更加灵活,更容易维护,更容易扩展。
基本原则(oo design princples)
封闭变化 encapsulate what varies.
面向接口编程而不是实现 code to an interface rather than to an implementation
优先使用组合而非继承 favor composition over inheritance
SRP: The single responsibility principle单一职责
系统中每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。
every object in your system should have a single responsibility , and all the objects services should be focused on carrying out that single responsibility.
1.每一个职责都是一个设计的变因,需求变化的时候,需求变化反映为类职责的变化,当你系统里面的对象都只有一个变化的原因的时候,你就已经很好的遵循了SRP原则。
2。如果一个类承担的职责过多,就等于把这些职责耦合在了一起。
3。SRP让这个系统更容易管理维护,因为不是所有的问题都搅在一起。
4。内聚cohesion其实是SRP原则的另外一个名字,你写了高内聚的软件其实就是说你很好的应用了SRP原则。
DRY:don’t repeat yourself principle
通过抽取公共部分放置在一个地方避免代码重复。
OCP:open-close principle开闭原则
类应该对修改关闭,对扩展打开;
classes should be open for extension, and closed for modification
LSP: the liskov substitution principle
子类必须能够替换基类
subtype must be substitutable for their base types.
1.lsp关注的是怎么良好的使用继承。
2。必须要清楚是使用一个method还是要扩展它,但绝对不是改变它。
3。LSP清晰的指出,OOD的IS-A关系是就行为方式而言,行为方式是可以进行合理假设的。是客户程序所依赖的。
4。LSP让我们得出一个重要的结论:一个模型如果孤立的看,并不具有真正单方的有效性。
5。对LSP的违反也潜在的违反了OCP。
DIP:依赖倒置原则。
高层模块不应该依赖于底层,二者都应该依赖于抽象。
抽象不应该依赖于细节,细节应该依赖于抽象。
ISP:接口隔离原则
不应该强迫客户程序依赖它们不需要的使用的方法。
为什么我们过早的纠缠于细节?问题的本质是什么?
思考没有层次这就是问题本质所在
善良的人在追求中纵然迷茫,却终将意识到有一条正途。《浮士德》
三层视角:概念视角,规约视角,实现视角。视角帮助我们将问题划分层次,隔离。