1.单一职责原则:功能单一,即引起一个类发生变化的原因只有一个。
如果一个类承担了多于一个的职责,当其中一个职责发生修改时,就可能会削弱或压制这个类承担其他职责的能力,这就造成了过度耦合(以前写GUI程序时,恨不得把所有的事情都放在图形界面那个类里面完成O(∩_∩)O~)。
软件开发工程很重要的一部分工作就是:发现职责,并分离、封装他们,如果你有多于一个动因去修改一个类,那它就承担了多于一个的职责。
2.开放-封闭原则:一个类、模块、系统应该对扩展开放,对修改封闭。
在软件开发过程,需求是不可能不变的,既然,需求要变,那我们应该采取什么措施在需求发生变化的时候使得我们能以最小的代价来处理它,显然,在原来的基础上增加代码比去修改原来的代价要容易得多,也是编程人员愿意的。
另一个方面,做到完全的“对修改封闭”有时候也不可能,总有那个一些地方是我们无法封闭的,对应它们,就应该构造出一定的抽象封装这些变化(正确的进行抽象和抽象本身一样重要),当然这种封装应该越早越好。
3.依赖倒置原则:高层不应该依赖于低层实现,双方都应该依赖于抽象。
常常做的是写一大堆低层的函数,类,库等等,让高层应用来调用,而经常发生的是底层经常发生变化,经常要去更改底层的实现,而高层应用又与原来的实现耦合,这就给维护带来了压力。
依赖倒置原则要求高层、低层都应该依赖于抽象,无论双方怎么变化,双方之间的抽象不变,双方都依赖抽象,则依赖关系就会终结于接口或者抽象类
4.优先使用对象组合,然后考虑使用继承
继承带来了复用的好处,同时也带来了类之间的耦合,对象组合的方式不但能有继承的优点,而且更加灵活