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

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


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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值