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

摘要:
设计模式开启模式:“领导、嘉宾、观众朋友,第一届OOTV杯设计模式大赛正式开幕”美丽的主持人GOF出现在舞台前,话音刚落,现场响起了响亮的音乐和热烈的掌声。感谢您参加OOTV杯的设计模式比赛。自OO诞生以来,它经历了跌宕起伏,今天我们要拥有性对象真的很不容易。

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

报名参赛:

“来、来、来,快来报名了,设计模式大赛,每个人都有机会,每个人都能成功,今天你参加比赛给自己一个机会,明天你就成功还社会一个辉煌。来来......”台子上方一很长的横幅,上写着“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位选择了行为模式,人数过多,所以行为型模式又分为了两组,也就是,我们将选手共分了四组,所有的选手都将首先参加分组比赛,每组第一名将参加我们最终设计模式冠军的争夺。选手的分组情况,请看大屏幕。”

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

免责声明:文章转载自《OOTV杯设计模式大赛——模式总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zookeeper集群软考笔记第三天之数据库系统下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java面向对象之抽象类

内容: 1、抽象类的产生 2、抽象类和抽象方法的定义与使用 3、抽象类和抽象方法的注意事项 4、实例分析 1、抽象类的产生 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。 比如一个图形类应该有...

接口和简单工厂设计模式

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 接口: 接口就是纯抽象类的演变,实现接口的类都必须实现接口的的方法。接口里全部都是方法的声明,没有方法的实现。接口里的方法都是public修饰的,就算不写public关键字,也是默认public的,里面的申请的属性 全...

什么是UML?

UML是统一建模语言,Unified Modeling Language的缩写 综合了面向对象的建模语言、方法和过程,是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持 可以帮助沟通与交流、辅助应用设计、文档的生成、阐释系统的结构和行为 定义了多种图形化的符号来描述软件系统部分或全部的静态结构和动态结构 包括:用例图(...

Essential.C#第五章 类

在第一章中你已经看到了如何声明一个新类Helloworld。在第二章,你也也学习了C#内建的原类型。你也知道了控制流,还有如何声明方法。现在是时候讨论如何定义属于自己的类型了。这在任何C#程序都是核心结构。C#作为一个面向对象的语言是完全支持类和构建对象。 本章为你引入c#的面向对象编程方式。重点是如何定义类,这是对象的模板。 在前面的章节的程序结构一直...

UML实践详细经典教程

面向对象的问题的处理的关键是建模问题。建模可以把在复杂世界的许多重要的细节给抽象出。许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML的精彩之处。 UML中有九种建模的图标,即: 用例图 类图 对象图 顺序图 协作图 状态图 活动图 组件图 配置图 本课程中的某些部分...

UML之一、为什么需要UML?

think in uml学习 面向对象和面向过程是两种不同描述世界的方法。 面向过程:世界视为过程,世界由一个个相互关联的小程序构建来的,是精密的。      但是构成一个系统的因素太多,要把所有可能的因素都考虑到,把所有因素的因果分析都分析清楚,再把这个过程模拟出来实在是太困难了。 面向对象:世界视为对象,世界由一个个相互独立、相互之间没有因果关系的对象...