为了更加深层次的理解设计模式,不得不提面向对象设计原则。主要的设计原则如下:


1.单一职责原则

即一个类应该仅有一个职责,如果一个类有多个职责,可能一个职责的变化,会影响到其它职责的实现,甚至引起其它职责的变化,这样的设计师很脆弱的。这个原则看起来简单,但是实际上很难做到,因难于区分和量化职责,因此这个原则在实际中很容易违反。


2.开放-关闭原则

即一个类应该对扩展开放,对修改关闭。该原则的要求是:类的行为是可以扩展的,而且是在不修改已有代码的情况下进行扩展,也不必改动已有的源代码或者二进制代码。实现这个原则的关键在于合理地抽象,分离出变化与不变化的部分,为变化的部分预留下可扩展的方式,比如,钩子方法或动态组合对象等。。

但是应该注意的是,适度的抽象可以提高系统的灵活性,使其可以扩展,可维护,但是过度地抽象,会大大增加系统的复杂度。应该在需要改变的地方应用此原则就可以了,而不是到处使用,从而陷入过度设计。

3.里氏替换原则

即子类型必须能够替换掉他们的父类型。


4.接口隔离原则

即不应强迫客户依赖于他们不用的方法。对于那些庞大的接口,应该按照不同的客户需要来分离成为针对客户的接口,这样的接口中,只包含客户需要的操作声明,这样既方便了客户的使用,也可以避免因误用接口而导致的错误。

分离接口的方式:1.进行代码分离       2.使用委托来分离接口      3.在支持多重继承的语言中,也可采用多重继承的方式进行分离。


5.最少只是原则

即只和你的朋友交谈。要求我们在设计系统的时候,应该尽量减少对象之间的交互,对象之和自己的朋友谈话,从而松散类之间的耦合。从而减少类与类之间的依赖。

对象的朋友: 1.当前对象本身   2.通过方法的参数传递进来的对象  3.当前对象创建的对象   4.当前对象的实例变量引起的对象  5。方法内锁创建或实例化的对象。


5.其它原则

1.面向接口编程

2.优先使用组合,而非继承。

3.一个类需要的数据应该隐藏在类的内部

4、类之间应该零耦合,或者只有传导耦合,换句话说,类之间要么没有关系,要么只使用另一个类的接口提供的操作

5.在水平方向上应该尽可能统一地分布系统功能。