Decorator模式(装饰模式 结构型)
来源:互联网 发布:linux 查看显存占用 编辑:程序博客网 时间:2024/05/16 00:47
当要为一个已存在的类,增添新的功能时,一般的会有两种做法,改变或者继承。改变的意思是直接在该类上新增功能:好处是够直接,坏处是会对已有的架构产生较大影响,破坏开源闭合原则。而继承是比较明朗的做法,但坏处是类的继承深度会加深,且增加职责是静态的,不够灵活。
有一种方法较Decorator模式,它提供一种方法,即不使用继承的方法,而通过新增 添职责的类,起到为该类动态增加功能的作用,其结构如下:
以下情况适用decorator模式
1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
2)处理那些可以撤消的职责。
3)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。举个栗子
一家卖面条的,提供鸡蛋面和牛肉面两种选择,然后还有其他配菜选项,如牛肉面可以加1个蛋,也可以加10个蛋,鸡蛋面也可以加牛肉。用户选择加几个蛋,都可以动态地去增加,十分灵活。以下为UML图。我想点一份鸡蛋面,再加2个鸡蛋和1份牛肉,代码是这么实现的:
Noodle* noodle = new EggNoodle(); //点一份鸡蛋面
Noodle* oneEggNoodle = new AddEgg(noodle); //加个蛋
Noodle* twoEggNoodle = new AddEgg(oneeggNoodle);//再加一个蛋
Noodle* totalNoddle = new AddBeef(twoEggNoodle);//加牛肉
printf(“ 购买了: %s, 共消费:%lf ”,totalNoodle->GetDescription().c_str(),totalNoodle->cost() );
可以专心吃面了哈! 0 0
- 结构型模式-----装饰模式(decorator)
- Decorator模式(装饰模式 结构型)
- Decorator 装饰(结构型模式)
- 结构型模式:Decorator(装饰)
- 装饰器模式Decorator(结构型)
- Decorator装饰设计模式(结构型)
- 结构型模式之装饰(Decorator)
- 装饰模式Decorator(结构型)
- Decorator装饰(结构型模式)
- 【结构型模式】decorator(装饰)
- 结构型模式-装饰(decorator)
- 结构型模式---装饰模式(Decorator)
- 装饰模式(Decorator)-对象结构型模式
- [设计模式-结构型]装饰模式(Decorator)
- 结构型模式-Decorator ( 装饰模式 )
- 设计模式(3)-结构型-装饰模式(Decorator)
- 装饰模式decorator(结构型设计模式)
- 结构型模式之装饰者模式(Decorator)
- Retrofit+OKhttp+RxJava框架的封装
- Android APP反编译
- MyBatis Generator自动创建SSM框架mapping pojo dao包下的代码详解
- logstash 根据type 判断输出
- 20160822,新的团队,新的起点,自力更生
- Decorator模式(装饰模式 结构型)
- 【挖坑记】JZOJ 4722 跳楼机
- mysql分别对分一组的数据进行更新
- [二维树状数组] codeforces 707E. Garlands
- JDBC学习入门
- UVA 1608 Non-boring sequence
- 每日一linux命令(56)-------watch命令
- java-JDBC简单的利用存储过程来《查询》或者《插入》
- 用户portal支持https协议,用loadrunner录制登陆脚本时发现未录制到用户名和密码