简谈23种基本设计模式的java实现

设计模式(design pattern),就是设计(design)程序时候可以拿来稍微改改就解决问题的模式(pattern)。

虽然看着挺多的,但等仔细琢磨后抓住各种设计模式的相同点和每种设计模式区别其他设计模式的不同点之后(也就是抓住矛盾的普遍性和特殊性),就会发现其实一点都不多(甚至于还嫌少)。(上学时候学的化学元素周期表够复杂吧?但只要知道了某种元素所在的族和所在族中的排行,学起来就容易多了。)

以下本着由远及近,由粗到细,由模糊到具体的认识原则来认识一下设计模式。

理论是对实践的一种抽象,或者在解决实际问题的过程中对解决问题所采取方式的一种高度归纳。设计模式也正是为了解决实际问题的需要由一堆比较天才的人多拍几下脑袋所想出来的,所以按实际解决问题的用途,可以把设计模式分三大块:

1、创建一个类(就好比先创建一个上帝,然后具体是造人、造物还是造鸡腿都由程序员创建出来的这个上帝说了算),这类模式叫创建模式。

2、为了方便管理而对各种类和接口彼此之间的关系进行构建(就好比张三、李四、王五本来彼此之间都是路人甲,但为了打败一个共同的小怪兽,他们彼此之间紧密的团结起来,但彼此之间又保留着各自的独立性。为了方便管理,作为程序员的你,得根据张李王的共性和个性进行了一些抽象的分析,以便于在遇到怪兽时候采取什么样的攻势),这类模式叫结构型模式。

3、为了完成某件事将参与者的一些列行为进行构建(就好比张三、李四、王五一起出去打小怪兽,但谁从正面攻击,谁从侧面攻击,谁从背后攻击;谁打脑袋,谁打躯干,谁打脚。。。这些不同的任务要彼此分清楚,不然乱打一气缺乏彼此协调很容易打怪不成反被虐),这类模式叫行为模式。

本着没有对象哪来对这些对象的组织和管理,不先对对象做良好的组织管理怎么调用这些对象来给老板干活的原则,先从创建模式开始扯。

1.创建模式:

创建一个对象的方法很多,具体采用哪种自己遇到问题根据实际需求看着办哈。

a、工厂方法模式:国富论告诉我们,合理的分工能提高生产效率从而提高人类的生活质量,现代社会更是需要啥就买啥而不是需要啥就造啥。比如作为一个伐木工,需要一把斧子咋办?买那!斧子哪来的,厂里造的呗。所以出现了斧子工厂。但劈柴的斧子和砍大骨头用来炖汤的斧子虽然都属于斧子却还是有些差异的,为了满足市场需求,斧子工厂针对不同需求人士生产了不同的斧子。这样随着斧子的投入生产,第一个模式,工厂模式也就这么出来了。

b、抽象工厂模式:随着斧子工厂的规模扩大,斧头厂的老板从产品仅限于在街坊领居间销售的小包工头逐渐成长为一个其产品畅销欧美亚非南北极而且好评如潮的大公司。随着市场的扩大,斧头产的boss打算将斧头厂建成为跨国公司,横跨A、B两国,这样一来就产生了产品的不同组合方式,比如A国生产有劈柴斧和砍骨斧、B国生产的劈柴斧和砍骨斧等等,当需要A国的劈柴斧就指定在 A国 生产 劈柴斧 。于是乎,抽象工厂模式就随着斧头市场的发展需要应运而生了。

c、单例模式:斧头boss为了自身的事业兢兢业业鞠躬精粹,随着事业的蒸蒸日上,斧头boss名声远扬,可惜人怕出名猪怕壮那,据狗仔队调查发现:斧头boss却生活简朴的一塌糊涂,怎么个一塌糊涂?就拿毛巾来说吧,斧头boss洗头洗脸洗澡擦脚用的居然是同一块毛巾。。。。。。早上起来洗脸,用了毛巾A,大夏天的太热,斧头boss洗了个澡,用了毛巾A,晚上泡完脚擦脚,用的还是毛巾A。总而言之,从头到脚,需要用到毛巾的时候随手拿来的永远是毛巾A,而且几十年如一日。这样,第三种设计模式——单例模式,随着对斧头boss生活细节的爆料也横空出世了。。。。

今天暂时先说到这,欲知后事如何,且听下回分解。。。。。。。

=================================以下是后来补的备注===============================

(网搜了一下,网上对设计模式的介绍写的好的挺多的,各位网友可以度娘后多看看,有兴趣的话自己好好琢磨,正如1万个人眼里有1万个哈姆雷特,1万个码农头脑中也有1万个对设计模式的不同解释,但这些都是其次,能否活学活用解决实际问题才是最重要的。由于精力有限,后面的几个设计模式(包括原本打算附在后面的代码)暂时不放上去了,等腾出时间后再好好整理一下。)

注:楼下两位大神指责的很正确,设计模式确实不是java特有的,在此一并感谢。本来笔者想用java照着前面讲的故事实现一遍的,但命题时考虑不周引起歧义而误人子弟。在此更正。(原题为:简谈java的23种基本设计模式)

posted @ 2016-07-16 21:36  笨熊星座  阅读(386)  评论(2编辑  收藏  举报