模式——工程化实现及扩展(设计模式Java 版)


--

模式——工程化实现及扩展(设计模式Java 版)

王翔,孙逊著

ISBN 978-7-121-15638-0

20124月出版

定价:59.00

16

416

设计模式不是一门适合空谈的技术,它来自于开发人员的工程实践又服务于工程实践。

本书并不是一本面向入门者的读物,因为它需要结合工程实践介绍如何发现模式灵感、如何应用模式技术。不过作为一本介绍设计模式的书,它并不需要读者对于庞大的JDK有深入了解,因为扩展主要是结合Java语法完成的,配合书中的实例,相信读者不仅能够熟练应用设计模式技术,也能令自己的Java语言上一个台阶。

为了降低学习门槛,本书第一部分除了介绍面向对象设计原则外,还充实了一些Java语言的介绍,但这些内容并不是枯燥的讲解,读者可以在阅读中通过一系列动手练习尽快吸收这些理论并将它们转化为自己的技能。本书最后一部分的“GOF综合练习把各种设计模式做了一次集中展示,目的是让读者把分散的模式知识融合在一起,能够将书本知识真正用于改善一个生产型模块的实现。

本书内容生动,示例贴近中型、大型项目实践,通过一个个四两拨千斤的示例练习可以让读者有一气读完的兴趣。

 

如同每个人都有其个性一样,每种开发语言也有自己的特点。

项目中,我们固然可以机械地将一种语言的开发经验套用到另一种语言中,但效果不一定好,因为:

    语言有自己的短处:用短处去实现需求不仅费时费力,结果也不理想。

    语言有自己的长处:为了沿用以前的经验而削足适履,没有用到语言的精要,结果暴殄天物。

相信读者也发现了,用一种语言写一个应用是一回事,写好一个应用则完全是另一回事,这就是工程化代码和玩具代码的区别。教科书上的知识落实到工程上时不能按图索骥,需要考虑开发语言和目标环境,设计模式也不例外。

也许读者会觉得本书中很多实现方式与《设计模式》介绍的内容不一致,这是因为《设计模式》一书出版至今已近20年,其间无论是开发语言还是技术平台均已经换了人间GOF 23个模式的思想不仅影响着我们,更影响着走在技术前沿的语言设计者、平台设计者,他们也在工作中潜移默化地把模式思想融入自己的工作成果,作为用户,我们推却别人的盛情,所有事情都从车轮做起,多少有点不经济。

作为本系列的Java设计模式分册,我试图用最Java的方式将自己对于设计模式的理解呈献给读者,而且实现上务求简洁、直接。结构上,本书分为5个部分:

1)第一部分:预备知识

包括面向对象设计原则中面向类的部分、Java语言面向对象扩展特性,以及JavaC#语法特性的简单对比。

2)第二部分:创建型模式

主要介绍如何创建对象,如何将客户程序与创建过程的变化有效隔离。

3)第三部分:结构型模式

从静态结构出发,分析导致类型结构相互依赖的原因,通过将静态变化因素抽象、封装为独立对象的办法,梳理对象结构关系。

4)第四部分:行为型模式

从动态机制出发,分析导致类型调用过程的依赖因素,通过将调用关系、调用过程抽象、封装为独立对象的方法,削弱调用过程中的耦合关系。

5)第五部分:GOF综合练习

为了便于读者从整体上体会模式化设计思路和实现技巧,这部分通过一个综合性的示例向读者展示如何发现变化、抽象变化、应用模式并最终结合Java SE平台特性落地实现的过程。

不管之前对于模式是否有所尝试,我希望读者不妨浏览一下这些内容,毕竟模式思想转化为模式设计思路,再转化为模式应用技巧是一个渐进的过程,必须实际动手才会加深印象,然后才可能进一步开阔思路。本章示例设计上变化因素较多,需要三类模式的综合运用,务求能起到抛砖引玉的效果。

感谢多年培养、帮助我的领导和同事们,多年富有挑战、共同拼搏的项目经历使我能够完成这本书。

感谢我和我妻子共同的父母,他们一直给予我无私的关心和照顾,还教会我学会从生活中发掘无穷的技术灵感。

最后,感谢我挚爱的妻子,是她给予我直面挑战、战胜挑战的信心和力量。

受到自己开发年限和项目经验的限制,本书难免有疏漏和不足之处,希望能够听到您的批评和建议。

 

王翔                    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

异构计算

异构计算的英文名称是Heterogeneouscomputing,主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式。常见的计算单元类别包括CPU、GPU等协处理器、DSP、ASIC、FPGA等。 有点看不懂,没关系,有位大神给了一个通俗的解释&#xf…

[Redux/Mobx] Redux怎样设置初始状态?

[Redux/Mobx] Redux怎样设置初始状态? redux包里面的createStore方法的第二个可选参数即可设置state的初始值在定义从根到子的reducer时,可以通过默认参数的方式定义state的初始值 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很…

由Qt中qApp想到的(这是单例模式么???)

From: http://blog.csdn.net/qq575787460/article/details/7880972 学Qt时,发现只要包含头文件QApplication或者QCoreapplication,就用使用qApp,指向一个当前实例。 查看源码发现qApp是个宏: QApplication中:#define q…

根据网页地址获取页面内容

public JSONObject urlConn(String urlStr, String portStr){ String port getPort(portStr); urlStr (urlStr ! null)?(host port "/?" urlStr):(host port); int responseCode; try { url new URL(urlStr); conn (HttpURLConnection) url.openConnection…

bootstrap基础学习十篇

bootstrap字体图标(Glyphicons) a.什么是字体图标 字体图标是在 Web 项目中使用的图标字体。虽然,Glyphicons Halflings 需要商业许可,但是您可以通过基于项目的 Bootstrap 来免费使用这些图标。 b.bootstrap自带字体图标文件结构…

Python 用hashlib求中文字符串的MD5值

From: http://blog.csdn.net/haungrui/article/details/6959340 使用过hashlib库的朋友想必都遇到过以下的错误吧:“Unicode-objects must be encoded before hashing”,意思是在进行md5哈希运算前,需要对数据进行编码。而且在不…

[Redux/Mobx] Mobx的设计思想是什么

[Redux/Mobx] Mobx的设计思想是什么 依赖收集。在Mobx中,定义了observable的属性,mobx会自动跟踪这个属性值的变化;在用了mobx与react的桥接库mobx-react之后,这种跟踪关系会体现了视图上,JSX依赖的observable属性值变…

csu 1008 - Horcrux

不得不表示,能用栈来做的题目前对我来说都很费解,这题又是抄的,来自校友JMDWQ,只不过把C改成了C。开始时我用的是暴搜,数组的每一位就是一个“魂器”,而他的栈结构里每一位是连续相同的“魂器”的长度&…

0301——SearchController

创建显示的页面 SearchViewController * searchVC [[SearchViewController alloc]init]; 告诉搜索控制器将结果显示在创建的页面上 self.searchController [[UISearchController alloc]initWithSearchResultsController:searchVC]; 由谁来监听搜索内容发生的事件 self.search…

[Redux/Mobx] 推荐在reducer中触发Action吗?为什么?

[Redux/Mobx] 推荐在reducer中触发Action吗?为什么? 不推荐。首先reducer应该是一个纯函数,reducer中的代码应该把代码逻辑限定在当前的reducer内,如果触发了action,会触发其它的reducer、甚至再次触发自身&#xff0…

windows等宽字体

From: http://plplum.blog.163.com/blog/static/310324002009814105634/ windows下的等宽字体: BatangChe Courier Courier New DotumChe Fixedsys GulimChe GungsuhChe Lucida Console Lucida Sans Typewriter MingLiU MS Gothic MS Mincho Terminal 仿宋_GB2312 楷…

JS中的Replace方法

最近查一个bug,原因是JS中的Replace方法造成的,当将一个字符串中有处需要替换时,一般会用到JS中的Replace方法,Replace方法的第一个参数如果是传的字符串,只会替换第一处。代码如下: var str "0CEA65…

sed替换变量

今天在写脚本时用到了sed,我用sed替换xml文件中的变量。一般在sed 中替换都用单引号,如下边 sed -i ‘s/10/1000/g’ test.xml但是如果需要把1000改成变量,如sed -i ’s/10/$num/g‘ test.xml这样就不成功。 此时需要把单引号改成双引号,如下…

[Redux/Mobx] 你有了解Rxjs是什么吗?它是做什么的?

[Redux/Mobx] 你有了解Rxjs是什么吗?它是做什么的? RxJS 是一个库,它通过使用 observable 序列来编写异步和基于事件的程序。它提供了一个核心类型 Observable,附属类型 (Observer、 Schedulers、 Subjects) 和受 [Array#extras]…

使用Windows命令行启动服务

From: http://www.cnblogs.com/wlei/archive/2011/12/24/2300389.html 在自己电脑上搭建了一个svn服务器,以服务的形式注册到了windows中,每次启动都要去服务选项中开启,感觉很麻烦,GOOGLE了一下,发现早就有了好方法&a…

mysql cluster 7.1搭建

简单步骤,分享下: hostname IP 应用 db1 192.168.50.10 MGM db2 192.168.50.20 NDBD db3 192.168.50.30 NDBD2 db4 192.168.50.40 MYSQLD db5 192.168.50.50 MYSQLD ***************************** 1.安装配置管理节点(DB1)MGM ************…

redis实现cache系统实践(六)

1. 介绍 rails中就自带有cache功能,不过它默认是用文件来存储数据的。我们要改为使用redis来存储。而且我们也需要把sessions也存放到redis中。关于rails实现cache功能的源码可见于这几处: https://github.com/rails/rails/blob/master/activesupport/lib/active_su…

[Redux/Mobx] 在redux中,什么是action?

[Redux/Mobx] 在redux中,什么是action? action是Redux中定义一个响应的动作,action总是有一个type属性,作为这个动作的唯一标识; Reducer函数则会根据这个action.type来如何生成并返回一个新的state 个人简介 我是歌谣&#x…

VMware 9 安装 Mac OS X 10.8 Mountain Lion 图文全程

From: http://unmi.cc/vmware9-install-mac-os-x-mountain-lion/#comment-8684 本教程是在 VMware 9 下安装当前最新版的 Mac OS X Mountain Lion 苹果系统。曾在 VirtualBox/VMware 下安装过 Mac OS Lion 系统,但安装后是无法升级到 Mountain Lion 的,所…

显示和快速隐藏Mac桌面所有图标

隐藏:defaults write com.apple.finder CreateDesktop -bool false;killall Finder;say icons hidden恢复显示:defaults write com.apple.finder CreateDesktop -bool true;killall Finder;say icons show上面的操作甚至可以制作成为一个Applescript&…