OOTV杯设计模式大赛——模式总结

摘抄自《大话设计模式》一书

 

报名参赛:

“来、来、来,快来报名了,设计模式大赛,每个人都有机会,每个人都能成功,今天你参加比赛给自己一个机会,明天你就成功还社会一个辉煌。来来......”台子上方一很长的横幅,上写着“OOTV杯设计模式大赛海选”,下面一个帅小伙拿着话筒卖力的吆喝着。

“大姐、二姐,我们也去参加报名参加吧。”工厂三姐妹中最小的简单工厂说道,

“这种选秀比赛,多的去了,很多是骗子的,没意思”大姐抽象工厂说

“我觉得我们三姐妹有机会的,毕竟我们从小就是学这个出身。”二姐工厂方法也很有兴趣参加。

“大姐,去吧,去吧”简单工厂拉住抽象工厂的手左右摇摆着。

“行了行了,我们去试试,成就成,不成可别乱哭鼻子”抽象工厂用手指点了一下简单工厂的鼻子,先打上了预防针。

“放心吧,我们都会成功的。”简单工厂很高兴,肯定的说。

三个人果然顺利通过了海选。但在决赛前的选拔中,工厂方法和抽象工厂都晋级,而简单工厂去不幸落选了。

“呜呜呜.......”简单工厂哭着回到了后台。

“小妹,别哭了,到底发生了什么?”工厂方法搂住她,轻声问道。

“他们说我不符合开发——封闭原则精神”简单工厂哽咽达到:“所以就把我淘汰了”

“你在对每一次扩展时都要更改工厂类,这就是对修改开放了,当然不符合开闭原则。”抽象工厂说道:“行了,讲好了不许哭鼻子的”

“哇。。。哇”被大姐一说,简单工厂放声大哭起来。

“二姐,你要好好加油,为我们工厂家装争光。”简单工厂握着工厂方法的手说,然后对着抽象工厂说:“大姐,哼,你老是说风凉话话,祝你早日淘汰”边说着,简单工厂却破涕为笑了。

“你这小呢子,敢咒我。看我不.......”抽象工厂脸上带笑,举手欲拍过去。

设计模式开模式:

“各位领导、各位来宾、观众朋友们,第一届OOTV杯设计模式大赛正式开赛”漂亮的主持人GOF出现在台前,话音刚落,现场顿时响起了激昂的音乐热烈的掌声。

“首先我们来介绍一下到场的嘉宾,第一位使我们的OOTV创始人,面向对象先生”只见前一排一位40多岁的中年人站起来,向后排的观众挥手。

工厂方法在后台对着抽象工厂说:“没想到面向对象这么年轻,40岁就功成名就了”

“是呀,他从小是靠simula服装开始创业的,后来做smalltalk的生意开始发扬光大,但最终让他成功的是java,我觉得他也是运气好。”抽象工厂解释说。

“运气也是要给准备头脑的人,前二十年,做c品牌服装生意的人多的是了,结构化编程就像神一样被顶礼膜拜,只有面向对象能坚持OO理念,事实证明,OO被越来越多的人认同,这可不是运气。”

“结构化编程那确实是有些老了,时代不同了,老的偶像要渐渐退出,新的偶像再站出来,现在是面向对象的时代,当让如日中天,再过几年就不一定是他了”抽象工厂相对悲观的说。

“面向对象不是一直声称自己“永远25岁”吗”工厂方法双手抱拳放在胸前,坚定的说:“我看好他,他是我永远的偶像”

“到场的来宾还有:抽象先生、封装先生、继承女士、多态女士。他们也是我们这次比赛的策划、指导和监制、掌声欢迎。”主持人GOF说道。

工厂方法说“啊,这些明星、平时看都看不到的,真想为他们尖叫。”

抽象工厂说:“我最大的愿望就是能得到抽象先生的签名,看来极有可能梦想成真了。”

两姐妹在那里入迷望着前台,自说自话着。

“现在介绍本次大赛的评委、单一职责先生、开放封闭先生、依赖倒置先生、里氏代换女士、合成聚合服用女士、迪米特先生。”支持人GOF说道。

“那个叫开放封闭的家伙就是提出淘汰小妹的人”抽象工厂对工厂方法说。

“嘘、小声点,他们可就是我们的评委,我们的命运就有他们决定的。”工厂方法把食指放在嘴边小声的说。

“下面有请面向对象先生发表演讲。”主持人GOF说道。

面向对象大步流星的走向了前台的,没有任何稿子,语音洪亮的开始了发言。

“各位来宾,电视机前的朋友们,大家好!”

感谢大家来为OOTV杯设计模式大赛捧场,OO从诞生到现在,经历了风风雨雨,我面性对象能有今天真的非常的不容易。就着这个机会,我来谈谈面向对象的由来和设计模式大赛的目的。

软件开发思想经过了几十年的发展,最早的机器语言编程,程序员一直是内存和外村容量的苛刻限制下“艰苦”劳作。尽管如此,当时程序员还是创造出许多令人惊奇的工程软件。后来,高性能的计算机愈来愈普及,他们拥有的较多内存外存空间,变成业发展到了较高的层次,不再对任一细节都斤斤计较,于是出现了高级语言,软件变成开始进入了全面开花的时代。

刚开始的高级语言编写,大多是面条式的代码,随着代码的复杂化,这会造成代码极度混乱。随着软件业的发展,面条式的代码是越来越不适应发展的需要。此时出现了结构化编程,即面向过程的开发,这种方式把代码分割了多个模块,增强了代码的复用性,方便了调试和修改,但是结构也相对复杂一些,面向过程的开发,把需求理解成了一条一条的业务流程,开发前总是喜欢问用户:你的业务流程是什么样的?。然后他们分析这些流程,把这些流程交织组合在一起,然后再划分成一个又一个的功能模块,最终通过一个一个的函数,实现需求,这对一个小型的软件来说,或许是最直接最简洁的做法。

而问题也就出在了这里,随着软件的不断复杂化,这样的做法也就有了很大的弊端,面向过程关注业务流程,但无论多么努力工作,分析的如何好,也是永远无法从用户那里获得所有的需求的,而业务流程都会反过来影响业务流程,业务流程的制定需要受到很多条件的限制,甚至程序的效率,运行方式都会反过来影响业务流程。有时候用户也会为了更好的实现商业目的,主动的改变业务流程,并且一个流程的变化经常带来一系列的变化。这就使得按照业务流程设计的程序经常面临变化,今天请假可能就只需要打声招呼就行了,明天请假就需要多个级别管理者审批才可以,流程的易变性,使得把流程看得很重,并不能适应变化。

面向过程通过划分功能模块,通过函数相互间的调用来实现,但需求变化时,就需要更改函数。而你改动的函数有多少的地位在调用它,关联多少数据,这是很不容易弄清楚的地方,或许开发者本人弄得清楚,但下一个维护代码者是否也了解多由函数的彼此间调用关系呢?

函数的修改极有可能引起不必要的Bug的出现,维护和调试中所耗费的大多数时间不是在修改Bug上。而是花在寻找Bug上。弄清楚如何避免在修改代码上导致不良副作用上了,种种迹象表明,面向过程的开发也不能适应软件的发展。

  与其抱怨需求总是变化,不如改变开发过程,从而更有效的应对变化。从而面向对象的编程方式诞生。就是为了解决变化带来的问题。

面向对象关注的是对象,对象的优点在于,可以定义自己负责的事物,做要求他自己做的事情,对象应该自己负责自己,对象应该自己负责自己,而且应该清楚定义责任。

面向对象的开发者,把需求理解成一个一个对象,他们喜欢问用户:这个东西做什么,他从哪里来,他能做什么事情?,然后他们制造这些对象,让这些对象互相调用,符合了业务的需求。

需求变化时必然的,那么尽管无法预测会发生什么变化,但是通常可以预测那里发生变化,面向对象的优点之一,就是可以封装这些变化的区域,从而更容易的将代码与变化产生的影响隔离开来。代码可以设计得使需求的变化不至于产生更大的影响,代码可以逐步演进,新代码可以影响较少的加入。

显然,对象流程更加稳定,也更加封闭。业务流程从表面上看只有一个入口,一个出口,但是实际上,流程的每一步都可能改变某个数据的改变、改变某个设备的状态,对外界产生影响。面向对象则是完全通过接口与外界联系,接口内部的事情与外界无关。

当然,有了面向对象的方式,问题的解决看上去不再这么直接了当,需要首先开发业务对象,然后才能实现业务流程,随着面向对象编程方式的发展,又出现了设计模式、ORM、以及不计其数的工具、框架。软件为什么会越来越复杂呢?其实这不是软件本身的原因,而是因为软件需要解决的需求越来越复杂了。

面向过程设计开发相对容易,但不容易应对变化。面向对象设计开发困难,但却能更好的应对千变万化的世界,所以现代的软件需要面向对象的设计和开发。

设计模式是面向对象技术的最新进展之一,由于面向对象设计的负责性,所以我们希望能做出应对变化、提高复用的设计方案。而设计模式就能帮助我们做到这样的结果。通过复用已经公认的设计,我们能够在解决问题时避免前人所犯的种种错误,可以从学习他人的经验中获益,用不着为那些总是会重复出现的问题再次设计解决方案。显然,设计模式有助于提高我们的思考层次。让我们能站在山顶而不是山脚,也就是更高的高度来俯视我们的设计。

如今,好的设计模式越来越多,但了解他们的人却依然很少,我们OOTV举行设计模式大赛的目的一方面为了评选出最优秀的设计模式,另一方面也会死希望让更多的人了解他们,认识他们,让他们成为明星,让他们可以为您的工作服务。

祝愿本届大赛圆满成功。谢谢大家~!

正在此时,突然一个人双手举着一块牌子冲上讲台,纸上写着“Service-Oriented Architecture(面向服务体系的体系结构SOA)”,口中大声且反复的说道:“抵制Object-Oriented,推广Service-Oriented,OO已成往事,SOA代表未来。”

这突如其来的变化,让全场哗然,很多人交头接耳,说着关于SOA与OO的关系。只有面向对象先生依然站在讲台上,微笑不语,显然久经风雨的他对与这种事早已见怪不怪,保安迅速的带着此人离开了会场。会场渐渐又恢复了安静。

“下面宣布一下比赛规则。”GOF的声音再次响起,“本次大赛根据模式的特点,设置了三个类别,分别是创建型模式、结构模式和行为模式,但由于有11位选择了行为模式,人数过多,所以行为型模式又分为了两组,也就是,我们将选手共分了四组,所有的选手都将首先参加分组比赛,每组第一名将参加我们最终设计模式冠军的争夺。选手的分组情况,请看大屏幕。”

(未完待续......)

posted @ 2011-11-16 08:58  指尖流淌  阅读(434)  评论(0编辑  收藏  举报