首页 > 其他 > 详细

装饰模式:不修改代码,给对象扩展新的功能

时间:2016-05-07 08:18:06      阅读:172      评论:0      收藏:0      [点我收藏+]

还是以我曾做过的项目举例吧,曾经做过一套图书销售管理系统,里面涉及库存图书信息查询功能。在这个功能里,除了要查询作者、出版社、定价等所有图书都共有的信息外,根据图书种类的不同还需要查询一些额外的信息。例如教材要查询适用年级、科目等,地图册要查询比例尺、国家、省份等信息。最初的设计是每种图书都有一个Service类来查询基本信息和特性信息,后来发现查询基本信息的代码大量冗余,每当基本信息出现变动时,要修改的代码有十几处。于是对架构做了改进,引入了装饰模式,程序框架变成下面这样:


技术分享

首先还是定义一个BookService的接口,其中有查询(query)等方法,BookServiceImplBookService的一个实现,其中的查询(query)方法实现了查询图书基本信息的功能。对于教材来说,除了查询基本信息外,还要查询教材相关的特性信息,因此定义了一个TextbookServiceImpl类,该类也是BookService的一个实现,其中还包含了一个BookServiceImpl成员,这样在query方法中就可以先调用BookServiceImplquery方法查询基本信息,再增加对特性信息查询的代码。MapbookServiceImpl类也是同理。

通过装饰模式的应用,完美的解决了对象的通用处理和个性化处理的统一和矛盾的问题,希望能给你的设计带来一些启发。


装饰模式:不修改代码,给对象扩展新的功能

原文:http://blog.csdn.net/u013668719/article/details/51334330

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!