分享
 
 
 

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

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Powered by http://[url=http://www.wufuheng.com/]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://[url=http://www.wufuheng.com]www.wufuheng.com/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有