追MM与C++设计模式

上传人:ni****g 文档编号:548301712 上传时间:2023-09-18 格式:DOCX 页数:8 大小:22.54KB
返回 下载 相关 举报
追MM与C++设计模式_第1页
第1页 / 共8页
追MM与C++设计模式_第2页
第2页 / 共8页
追MM与C++设计模式_第3页
第3页 / 共8页
追MM与C++设计模式_第4页
第4页 / 共8页
追MM与C++设计模式_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《追MM与C++设计模式》由会员分享,可在线阅读,更多相关《追MM与C++设计模式(8页珍藏版)》请在金锄头文库上搜索。

1、一个月下来,把常见的20个设计模式好好复习并且逐个用C+实现了一遍,收获还是很大 的,很多东西看上去明白了但是真正动手去做的时候发现其实还是不明白我深知这个道 理,于是不敢怠慢,不敢写什么所谓的解释原理的伪代码,不敢说所谓的知道原理就可以 了因为我知道,我还还没有资格说这个话,至少对于设计模式而言我还是一个初学者, 唯有踏实和实干才能慢慢的掌握到知识。在我学习设计模式的过程中,觉得造成理解困难的主要是以下几点,谈一下自己的体会, 希望对他人有帮助,不要走上我的老路上,毕竟我花了N长的时间才敢号称自己入门了 !-_-:1)Gof并不适合于初学者。初学设计模式的一般都是从Gof入门开始学习的,不幸

2、的是, 这不是一本好的教科书,而把这本书称为一本奠定了设计模式理论基础的开山之作也许好一 些,它把这些散落在各个设计中的常见模式收集起来,从此开始有了一个名词叫做Design Pattern”.说这本书不是一本好的教科书主要是以下的几个原因:a)对设计模式或者说面向对 象里面的一些原则性的东西解释的不够多不够彻底,比如面向接口编程而不是对实现编程 , 优先采用组合而不是继承等等,以至于后面看到各个模式的实现的时候很多模式看起 来很相似却找不到区别和共性的地方。b)对各个模式的解释或者举出来的例子不是特别的 好,大部分都是为了讲解模式而讲解,没有加入前面提到过的一些基本原则的考量在里面, 也就是

3、说:原理性的东西和实现(各个设计模式)脱节。2)初学者对语言或者说一些概念理解的不好。拿C+来说,为了做到面向对象需要提供 的语言上的支持有继承,多态,封装,虚函数,抽象等等,我以前初学C+的时候,只为 了学这些概念而去学习,不知道为什么要提供这些特性,这也是造成我走弯路的重要原因之 一。当然,指望一个初学者在初学语言的时候就知道why是一件很困难的事情,也许结合 着对设计模式的理解可以帮助你消化这些概念(我就是这样的)。3)看不懂UML结构图和时序图,UML图解释的类与类之间的关系,时序图解释的是各 个对象的实现方式,两者结合在一起看才能加深对设计模式的理解,事实上,我现在已经可 以做到仅仅

4、看这两个图示就掌握一个模式的原理和实现了。4)写的代码和参与过的项目不够多。设计模式和很多东西的产生过程都是一样的,首先 人们遇到了问题,然后很多人解决了这个问题,于是渐渐的有人出来总结出解决这些问题所 要遵守的一些原理和常用方法(我们称之为模式),久而久之就形成了一个理论或者说一个 学科。而后人在讲述这些理论的时候大都是照本宣科,这对于计算机这样一个强调实践的学 科或者说对于设计模式这样一个理论而言要理解起来是很困难的。前人在提出这些理论的时 候一些考量,权衡等等只有在你自己遇到了这些问题的时候才能慢慢的体会。有一种说法是, 没有写上 10W 行代码不要空谈什么设计模式大概就是这个意思吧。综

5、上所述,造成初学者学习设计模式困难的原因,一个是对基本的原则理解的不够透彻, 一个的选的入门教材不合理,还有一个就是对各个模式的表述不明白,再次是实践不够多。有几本书籍,我看过,我想可以谈谈我的看法。第一本,敏捷软件开发:原则,模式与实践,这本书对于设计模式最大的贡献在 于专门有几个章节讲述了面向对象的几个原则,比如Likov原则,开放封闭原则等等的,这 几个章节在我学习设计模式的过程中起了关键的作用,因为当我理解了这些原则之后开始慢 慢明白为什么要有纯虚函数提供接口,为什么要有抽象基类,为什么要封装我开始用这 些原则去理解各个设计模式,开始慢慢体会各个模式的区别和共性。另外看过的两本书,我觉

6、得性质都一样,如果你缺钱,任选其一吧。第一本是设计 模式精解,第二本是深入浅出设计模式,都是我花上几个晚上就可以看完的书。这 两本的立足点都是以生动的例子结合面向对象的基本原理来讲解模式,我更喜欢前者一些 (后者太贵,要不是打 5 折我才不买呐:)关于设计模式的一个疑问:非面向对象语言中有没有所谓的设计模式?设计模式最初 的定义是解决一些问题的惯用方法(大意如此),并没有明确的说必须要支持某种特性的语 言。我用纯C开发的项目实在是有限,平时也只是自己作一些小东西玩玩,没有做过任何 一个上万行的纯C开发的项目,所以一直对这个问题抱有疑问anyway,有问题是好事, 说明我在思考把这个问题放在这里

7、,以后慢慢实践之琢磨之博君一笑。关于设计模式,还有一篇有意思的文章一追MM与设计模式,这篇文章可谓是 寓教于乐的典范,讲述了 23 个模式在日常生活中的原型,虽然没有具体讲述如何实现,但 是对于理解各个设计模式的运用场合还是很有帮助的。相信对设计模式已经有了一定了解的 人看了这篇文章都会会心一笑:),作者和出处已经不详了。追MM与设计模式在CSDN看见了这篇文章,作者以轻松的语言比喻了 java的32种模式,有很好的启 发作用,但可惜没有给出具体的意思,我就在后边加上了:)这些都是最简单的介绍,要学 习的话建议你看一下java与模式这本书。创建型模式1、FACTORY追MM少不了请吃饭了,麦当

8、劳的鸡翅和肯德基的鸡翅都是MM爱 吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四 个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。 消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如 如何创建及如何向客户端提供。2、BUILDERMM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用 她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到 MM我只要按对应的键,它就能够用相应的语言说出我爱你”这句话了,国外的M

9、M也可以 轻松搞掂,这就是我的“我爱你”builder.(这一定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具 有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道 产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。3、FACTORY METHOD请MM去麦当劳吃汉堡,不同的MM有不同的口味,要 每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那 儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。工厂方法模式:核心工厂类不再负责所

10、有产品的创建,而是将具体创建的工作交给子类 去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产 品类应当被实例化这种细节。4、PROTOTYPE跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉 麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype 了。(100 块钱一份,你要不要)原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个 原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产 品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是 每一个

11、类都必须配备一个克隆方法。5、SINGLETON俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公 Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么 好的事)单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这 个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。结构型模式6、ADAPTER在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语, 她不会说普通话,只好求助于我的朋友kent 了,他作为我和Sarah之间的Adapter,让我 和 Sarah 可以相互交谈了(也不知道他会不会耍我

12、)适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本 因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合 适的实例给客户端。7、BRIDGE早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿 了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不 要问我早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的 强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/ 聚合关系 而不是继承关系,

13、从而使两者可以独立的变化。8 、 COMPOSITEMary 今天过生日。 “我过生日,你要送我一件礼物。 ”“嗯,好吧, 去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂, 买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀, 小姐,麻烦你包起来。”“”,MM都会用Composite模式了,你会了没有?合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模 式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合 成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同

14、等看待。9、DECORATORMary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个 月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面写上“最好的的礼物,就是爱 你的Fita”,再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),再找隔壁搞美术设计 的Mike设计了一个漂亮的盒子装起来,我们都是Decorator,最终都在修饰我这个人 呀,怎么样,看懂了吗?装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方 案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增 加由一些基本功能的排列组合而产生的非常大量的功能。10、FACA

15、DE我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样 照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式, 把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可 以用这个相机给我拍张照片了。门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供 一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类 只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。11、FLYWEIGHT每天跟MM发短信,手指都累死了,最近买了个新手机,可以把 一些常用的句子存在手机里

16、,要用的时候,直接拿出来,在前面加上MM的名字就可以发 送了,再不用一个字一个字敲了。共享的句子就是Flyweight,MM的名字就是提取出来的 外部特征,根据上下文情况使用。享元模式:FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支 持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存 储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状 态不能影响内蕴状态,它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类 中区分开来,将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象, 而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数 量。12、PROX

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号