设计模式——装饰模式(Decorator Pattern)
装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
UML图:

模型类:
Component类:
package com.cnblog.clarck; /**
* 接口对象,可以动态的给对象添加职责
*
* @author clarck
*
*/
public abstract class Component {
public abstract void Operation();
}
ConcreateComponent类:
package com.cnblog.clarck; /**
* 具体的装饰对象,起到给Component添加职责
*
* @author clarck
*
*/
public class ConcreateComponent extends Component { @Override
public void Operation() {
System.out.println("具体对象的操作");
} }
Decorator类:
package com.cnblog.clarck; /**
* 装饰抽象类,继承了Component,从外来类来扩展Component类的功能,
* 但对于Component来说是不需要知道Decorator的存在的。
*
* @author clarck
*
*/
public abstract class Decorator extends Component {
protected Component mComponent; public void setComponent(Component component) {
mComponent = component;
} @Override
public void Operation() {
if (mComponent != null) {
mComponent.Operation();
}
} }
ConcreateDecoratorA类:
package com.cnblog.clarck; /**
* 具体的的装饰对象,起到给Component添加职责的作用
*
* @author clarck
*
*/
public class ConcreateDecoratorA extends Decorator {
private String addedState; @Override
public void Operation() {
super.Operation();
addedState = "New State";
System.out.println("具体装饰对象A的操作" + addedState);
} }
ConcreateDecoratorB类:
package com.cnblog.clarck; /**
* 具体的装饰类B
*
* @author clarck
*
*/
public class ConcreateDecoratorB extends Decorator { @Override
public void Operation() {
super.Operation();
addedBehaivor();
System.out.println("具体装饰对象B");
} private void addedBehaivor() { //用来区别ConcreateDecoratorA }
}
测试类:
package com.cnblog.clarck; /**
* 测试类
*
* @author clarck
*
*/
public class Test {
public static void main(String[] args) {
ConcreateComponent component = new ConcreateComponent();
ConcreateDecoratorA decoratorA = new ConcreateDecoratorA();
ConcreateDecoratorB decoratorB = new ConcreateDecoratorB(); decoratorA.setComponent(component);
decoratorB.setComponent(decoratorA);
decoratorB.Operation();
}
}
设计模式——装饰模式(Decorator Pattern)的更多相关文章
- 设计模式-装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活
- 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)
原文:乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) 作者:weba ...
- 设计模式系列之装饰模式(Decorator Pattern)——扩展系统功能
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 二十四种设计模式:装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern) 介绍动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活.示例有一个Message实体类,某个对象对它的操作有Insert()和 ...
- 设计模式-09装饰模式(Decorator Pattern)
1.模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制:使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是 ...
- 设计模式 装饰模式(Decorator)
设计模式 装饰模式(Decorator) @author ixenos 装饰模式是什么 1.装饰模式以对客户端透明的方式对象的功能,是继承关系的一个替代方案,但装饰模式可以在不创造更多子类的情况下,对 ...
- 设计模式系列之装饰模式(Decorator Pattern)
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类,用来包装原 ...
- 装饰模式(Decorator pattern)
装饰模式(Decorator pattern): 又名包装模式(Wrapper pattern), 它以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式以对客户透明的方式动态的给 ...
- 基于东北F4的设计模式情景剧——第一幕 装饰模式(Decorator Pattern)
第一场 难题未解 布景:铁岭,晴天,午后,风.在一幢还算气派的写字楼的三层外墙上,挂着一条红色横幅,上面用歪歪扭扭的毛笔字写着"东北F4软件外包工作室".大风中,那早已褪色的条幅剧 ...
随机推荐
- 使用dd命令写iso文件到u盘
1. 使用df -h查看挂载点 [seif@study ~]$ df -h 文件系统 容量 已用 可用 已用% 挂载点 udev 1.9G 0 1.9 ...
- cmake指令详解
所需文件名:CmakeLists.txt,在需要操作的每个目录下都需要 PROJECT(工程名字) 这条指令会自动创建两个变量: <projectname>_BINARY_DIR( ...
- GreenPlum 大数据平台--备份-邮件配置-gpcrondump & gpdbrestore(五)
01,备份 生成备份数据库 [gpadmin@greenplum01 ~]$ gpcrondump -l /gpbackup/back2/gpcorndump.log -x postgres -v [ ...
- Spark 概念学习系列之从spark架构中透视job(十六)
本博文的主要内容如下: 1.通过案例观察Spark架构 2.手动绘制Spark内部架构 3.Spark Job的逻辑视图解析 4.Spark Job的物理视图解析 1.通过案例观察Spark架构 s ...
- 06-struts2与ognl的结合
1 参数接收 2 配置文件中 1 Demo2Action package www.test.c_config; import com.opensymphony.xwork2.ActionSupport ...
- 017-Servlet抽取时的BaseServlet模板代码
package www.test.web.servlet; import java.io.IOException; import java.lang.reflect.Method; import ja ...
- HDU 5318——The Goddess Of The Moon——————【矩阵快速幂】
The Goddess Of The Moon Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- 白话SpringCloud | 第五章:服务容错保护(Hystrix)
前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用.在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如 ...
- js 获取时间相关
$(document).ready(function () { var date = new Date(); var sb = ""; ...
- socket应用
socket的使用 socket.socket(网络层ip协议蔟,传输层协议类型,默认协议) # server.py # 导入模块 import socket # 实例化服务器,使用ipv4协议,tc ...