简单理解设计模式---对设计模式的探讨
最近,跟朋友在聊天的时候说到设计模式,有刚毕业的,也有工作了好几年的,大家都说设计模式很难理解,但理解了就是理解了,尽管在平时的编程里我们经常用到,但是就是说不出个所以然来,于是,就有了这篇文章。下面都是自己的一些理解,有不对的地方欢迎指出来,先道谢。
我觉得设计模式无非就是解决编程的低耦合高内聚的,或者更简单的理解就是面向接口编程,这个应该是我们理想的最终形态。
现在我们都习惯了面向对象编程,那么我们采取哪些方法可以做到这些呢?于是经过很多前辈的实践,得出了面向对象编程的5大基本原则,分别是单一职责、依赖倒置、里氏替换、接口剥离、开闭原则,也许还有一个迪米特法则,但是我个人觉得只要理解了前面的5个最基本的就可以了,迪米特法则也是为了降低耦合而总结出来的,那么我们一起来讨论下前面的5个:
(1)单一职责:详细的解释可以自行百度,但我觉得只要记住一个点就可以了,那就是一个类只作一样事情,我相信在实际的编程中,大家对于工具类都很熟悉,其实这个就是单一职责最好的实例,那么我们在思考其他的类的时候要不要借鉴下?
(2)依赖倒置:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。跟你们一样每次我看见这些描述性的文字就不好理解,或者感到特别的烦,但是我们可以结合spring框架来清楚的明白这些,只要你理解或者直到spring的依赖方式,那么理解这个就可以了,怎么注入的,这个就不展开讲。简单来说就是接口跟实现的只能是单向的高到低的依赖,不能实现来决定接口,抽象也一样。
(3)里氏替换:子类可以扩展父类的功能,但不能改变父类原有的功能。就是说通过继承的方式来扩展,下面通过例子来说明,其实这个非常容易理解
(4)接口隔离:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。其实就是说一个类引进的依赖尽量的少,不要重复关联接口,比如A、B、C三者,我们的需求是AC就可以实现的,但是我们有的时候做一样的事情却选择了ABC这种组合。
(5)开闭原则:对修改闭合,对扩展开放。这个就是说一个类写好了(明确功能了),就不要去修改这个类,我们可以通过继承或者接口实现的方式扩展我们需要的功能,保留原来的类的功能
看了上面的解释,再联想自己平时的编程过程,是不是经常用?其实我们就是很少总结而已,其实我个人觉得其中有很多的地方都相互重复了的,如果觉得还是有疑问,那么看看下面的图,再自己回味下,就拿我们平常耳熟能详的故事:
乌鸦->飞到->瓶子里->用嘴搬石头->喝水
如果这个时候你看错了,不是乌鸦,是白鸽或者其他的,那怎么办?如果这个乌鸦比较特别,他用翅膀呢?如果喝的不是水,是饮料呢?这个时候就考验我们的总结能力了,经过思考,上面的是不是可以换成这样:
鸟->飞到->一个地方->用它的方法->喝东西
这样是不是就好很多了?编程实现的话,我们就实现一个鸟类都基本具有的类(bird),再定义一个鸟的行为接口,然后是一些饮料的基本类,这样是不是就可以处理更多的需求了,如果在现实的编程中?
那么这里面是不是包含了里氏替换,单一职责、接口剥离、开闭?
最后,这样会不会感觉好一点?当然每个人都有自己的理解,我觉得通过结合自己的实际还是很容易就理解的。
更多推荐
所有评论(0)