Java装饰模式
来源:互联网 发布:紫 蔡健雅 知乎 编辑:程序博客网 时间:2024/06/11 02:22
出处:http://gongjiayun.iteye.com/blog/952242
Java装饰模式
装饰模式:给一个类添加一些额外的职责,并且在添加这些额外的职责时不会控制该类的执行逻辑。
UML类图:
组成部分:
抽象构件:原始的功能接口
具体构件:具体的原始功能类
装饰角色:持有具体构件类的对象,以便执行原有功能
具体装饰:具体扩展的功能在这里
下面看一个对开车功能拓展的实例(晚上+开车):
抽象构件:
- package com.gjy.drector;
- /**
- * 抽象接口,规范准备接收附加责任的对象
- * @author gjy
- */
- public interface Component {
- public void operation();
- }
具体构件:
- package com.gjy.drector;
- /**
- * 接收附加责任, 此类型的类可以有多个, 只对应一个Decorator类
- * @author gjy
- */
- public class ConcreteComponent implements Component {
- public ConcreteComponent(){}
- public void operation()
- {
- System.out.println("开车");
- }
- }
装饰角色:
- package com.gjy.drector;
- /**
- * 装饰角色,持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口
- * @author gjy
- */
- public class Decorator implements Component {
- private Component component;
- public Decorator(){}
- public Decorator(Component component)
- {
- this.component = component;
- }
- public void operation() {
- component.operation();
- }
- }
具体装饰:
- package com.gjy.drector;
- /**
- * 添加附加责任
- * @author gjy
- */
- public class ConcreteDecorator extends Decorator {
- public ConcreteDecorator(){}
- public ConcreteDecorator(Component component)
- {
- super(component);
- }
- public void operation()
- {
- this.addedOperation();
- super.operation();
- }
- public void addedOperation()
- {
- System.out.println("晚上");
- }
- }
测试:
- package com.gjy.drector;
- /**
- * 客户端类
- * @author gjy
- */
- public class Client {
- public static void main(String[] args) {
- Component component = new ConcreteComponent();
- Decorator decorator = new ConcreteDecorator(component);
- //客户端不变, 但已增加了责任
- decorator.operation();
- }
- }
输出结果:
晚上
开车
0 0
- java装饰模式
- Java装饰模式
- java装饰模式
- java 装饰器模式
- Java-----装饰模式
- java装饰者模式
- java---装饰模式
- java 装饰模式
- java 装饰器模式
- Java装饰模式
- java 装饰器模式
- Java装饰者模式
- Java装饰模式
- 装饰模式java
- java 装饰器模式
- java 装饰器模式
- Java装饰模式
- java装饰者模式
- Hibernate关联关系映射
- UVA10035Primary Arithmetic
- 聪明鸟与傻逼鸟
- 数据库查询语句面试
- Finally语句块的执行
- Java装饰模式
- Android图片压缩
- HDOJ 3398 String -- 组合 数学
- HDU 4725 The Shortest Path in Nya Graph(图论+最短路)
- Hibernate二级缓存问题
- Hadoop集群(第5期)_Hadoop安装配置
- Android平台向SD卡写文本文件
- 关于UITableView的Cell复用谈谈的一些心得
- fdsfdsfs