1.开闭-原则:对于一个软件实体(类,模块,函数等)来说,应该可以扩展,但不可以修改。
对于扩展是开放的(Open for extension),对于更改是封闭的(Closed for modification)。
2.单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。
软件设计就是要发现职责并且把这些职责相互分离,如果你可以想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。
3.迪米特法则
4.里氏代换原则
子类必须能够替换掉其父类。
例如如果设定鸟类可以飞,那么企鹅鸵鸟就不能继承于鸟类了。
5.接口分离原则
6.依赖倒置原则
a.高层模块不应该依赖低层模块,两个模块均应该依赖抽象。
b.抽象不应该依赖细节,细节应该依赖抽象。
为什么要叫倒置呢?
--程杰老师所说的例子,大话设计模式,第5章节
面向过程的开发时,为了使得常用代码可以复用,一般都会把这些代码写成函数的程序库,这样我们在做新项目的时候,去调用这些低层的函数就可以了。比如我们做的项目要访问数据库,所以我们就把访问数据库的代码写成了函数,每次做新项目是就去调用他们。这就叫做高层模块依赖低层模块。
问题是,当我们做新项目时,发现业务逻辑的高层模块都是一样的,但客户却希望使用不同的数据库或存储信息方式,这时以上的设计就会出现问题。由于高层模块与低层数据库绑定,没办法复用这些高层模块。就像PC中,如果CPU、内存、硬盘都需要依赖于具体的主板,主板一坏,所有部件都没用了,这显然不合理。反过来说,主板坏了应该不影响其他组件的使用。而如果不管高层模块还是低层模块,它们都依赖于抽象,具体一点就是抽象类和接口,只要接口稳定,那么任何一个的更改都不用担心其他收到影响,这就使得无论高层模块还是低层模块都可以容易的复用。
原文地址:http://www.cnblogs.com/dandingchuan/p/3762916.html