java设计模式(结构型)之装饰模式
来源:互联网 发布:趣学python编程中文版 编辑:程序博客网 时间:2024/06/11 11:48
第0章:简介
装饰模式定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活
装饰模式本质:动态组合
参考:http://chjavach.iteye.com/blog/767739 ,研磨设计模式(书籍),大话设计模式(书籍)
模式图:
待补充
第1章:实践
(1)组件对象的接口(Component.java)
package com.mcc.core.designPattern.structure.decorator;/**
* 组件对象的接口,可以给这些对象动态地添加职责
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-13 下午11:44
*/
public abstract class Component {
public abstract void someMethod();
}
(2)组件对象接口的具体实现对象A(ComponentExtendsA)
package com.mcc.core.designPattern.structure.decorator;/**
* 组件对象接口的具体实现对象A,被装饰的对象
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-13 下午11:50
*/
public class ComponentExtendsA extends Component {
@Override
public void someMethod() {
System.out.println("组件对象具体实现对象A的方法");
}
}
(3)组件对象接口的具体实现对象B(ComponentExtendsB.java)
package com.mcc.core.designPattern.structure.decorator;/**
* 组件对象接口的具体实现对象B,被装饰的对象
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-13 下午11:54
*/
public class ComponentExtendsB extends Component {
@Override
public void someMethod() {
System.out.println("组件对象具体实现对象B的方法");
}
}
(4)装饰器的接口(Decorator.java)
package com.mcc.core.designPattern.structure.decorator;/**
* 装饰器的接口,维持一个指向组件对象的接口对象,自身也是组件对象的子类
*
* 装饰模式的定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活
* 装饰模式的本质:动态组合
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-13 下午11:55
*/
public abstract class Decorator extends Component {
//持有组件对象
protected Component component;
/**
* 构造器,传入组件对象,对象来自装饰器具体实现对象
* @param component
*/
public Decorator(Component component){
this.component = component;
}
@Override
public void someMethod(){
System.out.println("转发前可以附加操作");
//转发请求给组件对象
component.someMethod();
System.out.println("转发后可以附加操作");
}
}
(5)装饰器具体实现类A(DecoratorExtendsA.java)
package com.mcc.core.designPattern.structure.decorator;/**
* 装饰器具体实现类A
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-14 上午12:05
*/
public class DecoratorExtendsA extends Decorator {
/**
* 构造器,传入组件对象,对象来自装饰器具体实现对象
*
* @param component
*/
public DecoratorExtendsA(Component component) {
super(component);
}
@Override
public void someMethod() {
System.out.println("装饰器A调用父类方法前操作");
//调用方法,这里可以向组件对象添加职责
super.someMethod();
System.out.println("装饰器A调用父类方法后操作");
}
}
(6)装饰器具体实现类B(DecoratorExtendsB.java)
package com.mcc.core.designPattern.structure.decorator;/**
* 装饰器具体实现类B
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-14 上午12:10
*/
public class DecoratorExtendsB extends Decorator {
/**
* 构造器,传入组件对象,对象来自装饰器具体实现对象
*
* @param component
*/
public DecoratorExtendsB(Component component) {
super(component);
}
@Override
public void someMethod() {
System.out.println("装饰器B调用父类方法前操作");
//调用方法,这里可以向组件对象添加职责
super.someMethod();
System.out.println("装饰器B调用父类方法后操作");
}
}
(7)客户端测试(Client.java)
package com.mcc.core.designPattern.structure.decorator;/**
* 客户端测试
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-14 上午12:15
*/
public class Client {
public static void main(String args[]){
//被装饰的对象
Component componentA = new ComponentExtendsA();
Component componentB = new ComponentExtendsB();
System.out.println("\n装饰器A装饰被装饰对象A:\n");
Decorator decoratorAA = new DecoratorExtendsA(componentA);
decoratorAA.someMethod();
System.out.println("\n装饰器A装饰被装饰对象B:\n");
Decorator decoratorAB = new DecoratorExtendsA(componentB);
decoratorAB.someMethod();
System.out.println("\n装饰器B装饰被装饰对象A:\n");
Decorator decoratorBA = new DecoratorExtendsB(componentA);
decoratorBA.someMethod();
System.out.println("\n装饰器B装饰被装饰对象B:\n");
Decorator decoratorBB = new DecoratorExtendsB(componentB);
decoratorBB.someMethod();
}
}
0 0
- java设计模式(结构型)之装饰模式
- java设计模式之结构型模式-装饰模式
- (8)设计模式之装饰模式(结构型模式)
- java设计模式——结构型之装饰模式
- 设计模式-结构型之装饰模式
- Java设计模式概述之结构型模式(装饰器模式)
- Java设计模式之结构型模式-装饰器模式(Decorator)
- 结构型:设计模式之装饰模式(十一)
- 设计模式之结构型-装饰模式(7)
- java 设计模式-结构模式之装饰模式
- Java设计模式(7)结构型:装饰模式
- 设计模式 结构型设计模式之装饰模式
- 设计模式--结构模式--装饰模式--Java
- 设计模式之装饰者模式(二)---java中的装饰者I/O结构
- Java 设计模式之装饰模式的详解(结构模式)
- 设计模式 - 结构型模式 - 装饰模式
- Java结构型设计模式-装饰(二)
- 装饰模式——结构型设计模式之四
- 【问题】matlab输入出现乱码
- java的HashCode方法
- Perl模式匹配经验总结
- SpringMVC中文乱码
- 记录下Ubuntu的安装与配置
- java设计模式(结构型)之装饰模式
- Eclipse 快捷键使用
- 经典SQL语句大全
- Java 堆内存
- WinRT的Stream对象模型
- 自定义圆形带颜色的加载进度条
- linux常见的打包压缩命令
- ubuntu内核编译调试
- db file sequential read等待事件的一点研究