CSDN博客

img wfh_178

精通java必看。(好书再荐!)

发表于2003/10/3 14:28:00  990人阅读

Powered by http://www.wufuheng.com/

讲到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:
button

derived class:
bitmap_button, plain_button等等


base class:
scroll_bar

derived class
bitmap_scroll_bar, plain_scroll_bar


这样设计看起来也确实不错,你要create一个window,可以这样

window mainwin = new bitmap_window
button button1 = new bitmap_button
button button2 = new bitmap_button

mainwin.add(button1)
mainwin.add(button2)

scroll_bar sbar = new bitmap_scroll_bar

mainwin.add(sbar)


你也许会说,这样不挺好么,但是,如果我要把整个窗口变成plain的呢?把整个窗口变成别的形式的呢?

search and replace, 把所有的bitmap换成plain。

window mainwin = new plain_window
button button1 = new plain_button
等等等

也许你说这样也不会很麻烦啊,但是如果是一个很大的项目,button等等的东西基本上到处都要创建,修改起来是很麻烦也很容易出错的。

这就牵扯到flexibility的问题了。

有好的解决办法么?有!design patterns之abstract factory.


abstract class BaseFactory
{
abstract public window createWindow();
abstract public button createButton();
abstract public scroll_bar createScrollBar();
//etc etc
}

class BitmapFactory : BaseFactory
{
public window createWindow { return new bitmap_window; }
public button createButton { return new bitmap_button; }
public scroll_bar createScrollbar { return new bitmap_s_bar;}
}

class PlainFactory : BaseFactory
{
public 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 O'Brien, 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,而且最好有开发和维护面向对象软件的经验,只有具备一些反面的设计经验才能充份体会设计模式的妙处。

这本书的出版虽然比英文版晚了近五年,但总是从无到有,有了巨大的进步。据可靠消息,目前国内有几家出版社都在大力引进国外技术名着,在技术出版领域保持跟踪国外最新动态,这对於国内软件业整体水平的提高和发展大有益处,毕竟最新的软件技术和发展都来自于国外,希望今後的技术名着不再有这五年之差,也希望我国的软件业能走向海外。

-----------------------------------------------------------------

http://www.wufuheng.com/

阅读全文
0 0

相关文章推荐

img
取 消
img