装饰者模式
来源:互联网 发布:网络软件工程师培训 编辑:程序博客网 时间:2024/05/20 22:02
装饰者模式
1、意图: 动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。
2、适用环境
(1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
(2)处理那些可以撤消的职责。
(3)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的 子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
3、参与者
1.Component(被装饰对象的基类)
定义一个对象接口,可以给这些对象动态地添加职责。
2.ConcreteComponent(具体被装饰对象)
定义一个对象,可以给这个对象添加一些职责。
3.Decorator(装饰者抽象类)
维持一个指向Component实例的引用,并定义一个与Component接口一致的接口。
4.ConcreteDecorator(具体装饰者)
Decorator类:
1、意图: 动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。
2、适用环境
(1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
(2)处理那些可以撤消的职责。
(3)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的 子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
3、参与者
1.Component(被装饰对象的基类)
定义一个对象接口,可以给这些对象动态地添加职责。
2.ConcreteComponent(具体被装饰对象)
定义一个对象,可以给这个对象添加一些职责。
3.Decorator(装饰者抽象类)
维持一个指向Component实例的引用,并定义一个与Component接口一致的接口。
4.ConcreteDecorator(具体装饰者)
具体的装饰对象,给内部持有的具体被装饰对象,增加具体的职责。
5.类图:
6 具体实现
abstractcomponent类:
phone.java
package com.heima.decorate;public interface Phone { public void call(); public void attribute();}abstractDecorator类:
AbstractDecorator.java
package com.heima.decorate;public abstract class AbstractDecotator implements Phone {private Phone phone;public void setPhone(Phone phone) {this.phone = phone;}public void call() {phone.call();}public void attribute() {phone.attribute();}}component类
Iphone.java
package com.heima.decorate;public class Iphone implements Phone {public void attribute() { System.out.println("美国产");}public void call() {System.out.println("用iphone打电话");}}
Decorator类:
RealDecorator.java
package com.heima.decorate;public class RealDecorate extends AbstractDecotator { @Override public void call() { super.call(); recall(); System.out.println("这是RealDecorateA"); } public static void recall(){ System.out.println("打长途电话"); }}test类:
package com.heima.decorate;public class TestDecorate {/** * @param args */public static void main(String[] args) { Iphone ip=new Iphone(); RealDecorate rd=new RealDecorate(); rd.setPhone(ip); rd.call();}}打印结果:
用iphone打电话打长途电话这是RealDecorateA
0 0
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式 DecoratorPattern
- 设计模式 - 装饰者
- 装饰者模式
- 装饰者模式
- 装饰者模式 - 2
- 装饰者模式
- 装饰者模式
- caffe 自定义层/添加自己的损失函数
- springMvc概念原理分析
- 从零开始,学习web前端之DOM和BOM
- Bootstrap-基本的标签
- js的基本数据
- 装饰者模式
- 关于if语句的嵌套
- 我的软件工程课目标
- HDU2016 A
- 主题模型初学者指南[Python]
- 从内核启动到执行多个arch_initcall、late_initcall等的调用过程
- 文章标题
- mysql数据库开始——查询
- 冒泡,选择,顺序查找 算法