资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
设计模式设计模式 可复用面向对象软件的基础可复用面向对象软件的基础讲到 oo,学过几年的人都会说,oo,我会。java 生来就是 oo 的,我一直用 java,自然也就 oo 了。oo 简单的时候也就几个 class 就好了。但是复杂的时候,一个人写几个 class 完成一个项目,另外一个人也写几个 class,但是 reusability, flexibility 的高下就分出来了。举个简单的例子,要制作一个 window,上面有 button,scroll bar, status bar 等等,这个 window 要支持不同的表现形式,比如说bitmap_window,这些 button, scroll bar, status bar 都可以load 上自己画好的图片,更好看些。再比如说 plain_window,上面都是些普通的 button,scroll bar, status bar。你会怎样设计?很简单。base class:buttonderived class:bitmap_button, plain_button 等等base class:scroll_barderived classbitmap_scroll_bar, plain_scroll_bar这样设计看起来也确实不错,你要 create 一个 window,可以这样window mainwin = new bitmap_windowbutton button1 = new bitmap_buttonbutton button2 = new bitmap_buttonmainwin.add(button1)mainwin.add(button2)scroll_bar sbar = new bitmap_scroll_barmainwin.add(sbar)你也许会说,这样不挺好么,但是,如果我要把整个窗口变成plain 的呢?把整个窗口变成别的形式的呢?search and replace, 把所有的 bitmap 换成 plain。window mainwin = new plain_windowbutton button1 = new plain_button等等等也许你说这样也不会很麻烦啊,但是如果是一个很大的项目,button 等等的东西基本上到处都要创建,修改起来是很麻烦也很容易出错的。这就牵扯到 flexibility 的问题了。有好的解决办法么?有!design patterns 之 abstract factory.abstract class BaseFactoryabstract public window createWindow();abstract public button createButton();abstract public scroll_bar createScrollBar();/etc etcclass BitmapFactory : BaseFactorypublic window createWindow return new bitmap_window; public button createButton return new bitmap_button; public scroll_bar createScrollbar return new bitmap_s_bar;class PlainFactory : BaseFactorypublic window createWindow return new plain_window; public button createButton return new plain_button; public scroll_bar createScrollbar return new plain_s_bar;你也许会问,这些东西有什么用?有!BaseFactory factory = new BitmapFactory;window mainWin = factory.createWindow();button button1 = factory.createButton();button button2 = factory.createButton();window.add(button1);window.add(button2);如果你要改成 plain 的,只需要 BaseFactory factory = new PlainFactory 就 ok 了!这样做的好处是显而易见的,首先,用户不需要关心具体是bitmapwindow,plainwindow,还是什么 window, object creation和具体的 code 完全分离开,大大减少了 dependancy。其次,这样做 enforce 了 bitmap_button 只能加在 bitmap_window里面。还有一系列好处。我也就不重复了。有兴趣的朋友请看这本书吧。Design Patterns (1995 addison-wesley)。这本书有什么好?我文采不好,也不多说,请看别人的书评。近 10 年来最重要的软件开发书籍设计模式设计模式 可复用面向对象软件的基础设计模式的英文书名是 Design Patterns: Elements of Reusable Object-Oriented Software , 这本书成名已久,实际上是 1995 年出版的,该书总共有四个作者 Erich Gamma, Richard Helm, Ralph Johnson,John Vlissides,全部是博士,个个来头不小。该书堪称是面向对象设计的经典名着,一直名列 Amazon 销售排行榜,Amazon 的读者综合评价达到了满分五颗星,专家学者对设计模式也赞不绝口,书中扉页列出了它获得的赞誉:“这本书是我长期以来所读过的写得最好的 最富洞察力的书籍之一该书不是泛泛而论,而是结合实例,以最佳的方式确立了模式的合法地位。“-Stan Lippman, C+ Report“这本众人期待的确达到了预期的全部效果。该书云集了经过时间考验的可用设计。作者从多年的面向对象设计经验中精选了 23 个模式,这构成了该书的精华部份,每一个精益求精的优秀程序员都应拥有这本设计模式 。 ”-Larry OBrien, Software Development“在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法可以作为後来者的榜样。如果要知道怎样恰当定义和描述设计模式,我们应该可以从他们那儿获得启发“-Steve Billow, Journal of Object-Oriented Programming“总的来讲,这本书表达了一种极有价值的东西。对软件设计领域有着独特的贡献,因为它捕获了面向对象设计的有价值的经验,并且用简洁可复用的形式表达出来。它将成为我在寻找面向对象设计思想过程中经常翻阅的一本书:这正是复用的真实含义所在,不是吗?“-Sanjiv Gossain, Journal of Object-Oriented Programming这本书虽然是五年前出版的,不过内容并不过时,软件工程的重要概念就是可复用,面向对象技术的发展使人们曾经设想会发明一种“软件芯片(software IC) ”来满足软件开发的需要,但这种想法目前看起来还是太遥不可及了,而近几年来“模式”给出了“软件可复用”的漂亮解决方案。所谓模式一词来源于城市建筑领域, “每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心。这样,你就能多次使用该方案而不必做重复劳动。”这种思想应用在面向对象设计领域,指的是总结软件设计中遇到的各类问题,并提出设计的解决方案。有经验的设计者知道,不是解决任何问题都要从头开始。这本书的目的就是将面向对象软件的设计经验作为设计模式记录下来,每一个设计模式系统地命名 解释和评价了面向对象系统中一个重要的和重复的设计。本书提供的 23 种设计模式看起来好像数目比较少,最新 2000 年出版的The Pattern Almanac 2000号称有 700 多种模式介绍,但实际上模式数量不在多少,关键在於领会设计模式的思想,学以致用。本书作者之一 John Vlissides 曾经有一次举行演讲,他问听众中有多少人看过设计模式 ,几乎所有人都举手,他再问有谁能解释如何实现组合模式(23 种模式之一) ,举手的人就寥寥无几了。这 23 种模式凝聚了作者的经验和心血,当你也开始在设计中考虑如何应用模式,如何使设计更简单,更灵活,复用性更好时,你的实力就无形中提高了一个层次。设计模式是每个软件设计人员的必备书籍,,但我要说明的是这本书并不是一本容易读懂的书籍,有的专家甚至说一个开发人员需要花上一年时间才能领会这本书的精要。学习模式需要反复练习体会,才能应用自如。这有点象学围棋中的定式,围棋定式是百年来高手下法的总结,但不能简单地应用,要看场合选择合适的定式,还要按棋理会变通下法。这本书不是读完就可以束之高阁的,只有具备相当基础的读者才能从本书获益,读者首先必须熟悉面向对象设计语言如 C+或者 Java,而且最好有开发和维护面向对象软件的经验,只有具备一些反面的设计经验才能充份体会设计模式的妙处。这本书的出版虽然比英文版晚了近五年,但总是从无到有,有了巨大的进步。据可靠消息,目前国内有几家出版社都在大力引进国外技术名着,在技术出版领域保持跟踪国外最新动态,这对於国内软件业整体水平的提高和发展大有益处,毕竟最新的软件技术和发展都来自于国外,希望今後的技术名着不再有这五年之差,也希望我国的软件业能走向海外。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号