装饰模式:不修改代码,给对象扩展新的功能
来源:互联网 发布:电脑风扇反转软件 编辑:程序博客网 时间:2024/04/30 07:26
还是以我曾做过的项目举例吧,曾经做过一套图书销售管理系统,里面涉及库存图书信息查询功能。在这个功能里,除了要查询作者、出版社、定价等所有图书都共有的信息外,根据图书种类的不同还需要查询一些额外的信息。例如教材要查询适用年级、科目等,地图册要查询比例尺、国家、省份等信息。最初的设计是每种图书都有一个Service类来查询基本信息和特性信息,后来发现查询基本信息的代码大量冗余,每当基本信息出现变动时,要修改的代码有十几处。于是对架构做了改进,引入了装饰模式,程序框架变成下面这样:
首先还是定义一个BookService的接口,其中有查询(query)等方法,BookServiceImpl是BookService的一个实现,其中的查询(query)方法实现了查询图书基本信息的功能。对于教材来说,除了查询基本信息外,还要查询教材相关的特性信息,因此定义了一个TextbookServiceImpl类,该类也是BookService的一个实现,其中还包含了一个BookServiceImpl成员,这样在query方法中就可以先调用BookServiceImpl的query方法查询基本信息,再增加对特性信息查询的代码。MapbookServiceImpl类也是同理。
通过装饰模式的应用,完美的解决了对象的通用处理和个性化处理的统一和矛盾的问题,希望能给你的设计带来一些启发。
0 0
- 装饰模式:不修改代码,给对象扩展新的功能
- MongoDB不修改代码实现php的旧驱动扩展php_mongo升级到新驱动扩展php_mongodb
- 设备中如何实现类似gopro给iphone分配ip但是不修改dns的功能
- 设备中如何实现类似gopro给iphone分配ip但是不修改dns的功能
- 在不修改代码的情况下无限扩展应用项目
- 开闭原则 -- 不修改原有代码,进行扩展
- 模式三:装饰者模式(Decorator Pattern)——对象的功能扩展
- 通过调试寄存器不修改代码实现bt功能
- 通过调试寄存器不修改代码实现bt功能
- 通过调试寄存器不修改代码实现bt功能
- 装饰模式 -- 扩展系统功能
- 扩展系统功能--装饰模式
- Android基于配置文件的测试模式(不修改代码通过配置文件来打开和关闭测试模式)
- 不修改源代码,动态注入Java代码的方法
- 扩展系统功能——装饰模式(三):图形界面构件库的装饰模式解决方案
- 扩展系统功能——装饰模式
- 扩展系统功能——装饰模式
- 扩展系统功能——装饰模式
- atan2数学函数应用实例
- hibernate 中使用XML配置方式cascade取值
- NYOJ 325 zb的生日
- Linux基础操作
- CUDA学习笔记(1)
- 装饰模式:不修改代码,给对象扩展新的功能
- 我排第几个——康托展开
- mybatis日记之mapper参数判断
- docker-codecombat
- ListView解决嵌套冲突
- selenium 学习-js执行,事件模拟,页面加载等待
- leetcode 036 Valid Sudoku
- 136 - Ugly Numbers
- JAVA音乐播放器(二)(实现列表点击播放)