设计模式(一)——面向对象原则

面向对象设计原则总结来讲包含六大基本原则,即开闭原则、里氏代换原则、合成复用原则、接口隔离原则、迪米特法则和依赖倒转原则。

掌握这六大基本设计原则的精髓,才能真正为以后的设计模式的学习做好铺垫,才能整理理解面向对象开发设计的原理,能够实现代码复用、开发可扩展、可重用的高质量代码。

开闭原则,即面向扩展开放,面向修改封闭,也就是说系统支持扩展,但是不支持修改。为什么这么说?在开发阶段,我们都知道,如果对一个功能进行扩展,如果只是一味地对方法进行修改,可能会造成一些问题,诸如可能会引入新的bug,或者增加代码的复杂度,对代码结构造成破坏、冗余,还需要重新进行全面的测试。那么该怎么解决这些问题?很简单,这就需要系统能够支持扩展,只有扩展性良好的系统,才能在不进行修改已有实现代码的基础上,引进新的功能。

要做到开闭原则,就需要多使用抽象类或者接口,将相似的类进行抽象,将公有的功能引入到抽象类中,这样在进行扩展时,只需要依据抽象类,生成新的子类即可。

里氏代换原则,即任何使用基类的地方,都能够使用子类替换,而且在替换子类后,系统能够正常工作。里氏代换原则在我们平时开发中用得很多,只要是实现了开闭原则,只要用到了抽象类或者接口,就应该会遇到。

而开闭原则和里氏代换原则则是我们下面要说的依赖倒转原则的基础。

扫描二维码关注公众号,回复: 752479 查看本文章

什么是依赖倒转原则?就是说我们的client类要依赖于抽象,而不是依赖于具体,也就是我们经常听到的“要面向接口编程”。在具体的实现中,如果一个类是依赖于一个抽象类,比如用一个抽象类做为方法的参数,那么在实现时就可以灵活的切换这个抽象类的子类。

接口隔离原则,主要说的是应该将接口粒度最小化,将功能划分到每一个不能再分的子角色,为每一个子角色创建接口,通过这样,才不会让接口的实现类实现一些不必要的功能。比如一个门有如下功能:开门、关门、响门铃;但是只有有门铃的门才能响门铃,没有门铃的门就只能开门、关门。因此如果门没有门铃而实现了这个接口的话,就多出了响门铃的功能。因此,需要将门这个接口分为两个接口:“开门、关门”、“响门铃”。

迪米特法则,主要是说尽量减少类之间的依赖关系,降低类之间的耦合。在应用中最直接的实现就是在两个类中间建一个中介类。但是这样可能会造成中介类的澎爆。

合成复用原则,也就是少用继承,多用组合。使用组合也就是将两个类之间建立关联关系,将一个类做为另一个类的属性。这个主要是区分两个角色之间是“is a”还是“has a”的关系,如果是“is a”就需要使用继承,而如果是“has a”就需要使用组合。例如电脑可以分为台式机和笔记本,这就是is a的关系,但是电脑与CPU就是has a的关系。

猜你喜欢

转载自arching.iteye.com/blog/1323184