oo设计原则[转]

设计原则是基本的工具,应用这些规则可以使你的代码更加灵活,更容易维护,更容易扩展。

基本原则(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:接口隔离原则

不应该强迫客户程序依赖它们不需要的使用的方法。

为什么我们过早的纠缠于细节?问题的本质是什么?

思考没有层次这就是问题本质所在

善良的人在追求中纵然迷茫,却终将意识到有一条正途。《浮士德》

三层视角:概念视角,规约视角,实现视角。视角帮助我们将问题划分层次,隔离。

posted @ 2009-10-10 13:45  smodi  阅读(285)  评论(0编辑  收藏  举报