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

  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)的更多相关文章

  1. 设计模式-装饰模式(Decorator Pattern)

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

  2. 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)

    原文:乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) 作者:weba ...

  3. 设计模式系列之装饰模式(Decorator Pattern)——扩展系统功能

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  4. 二十四种设计模式:装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern) 介绍动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活.示例有一个Message实体类,某个对象对它的操作有Insert()和 ...

  5. 设计模式-09装饰模式(Decorator Pattern)

    1.模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制:使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是 ...

  6. 设计模式 装饰模式(Decorator)

    设计模式 装饰模式(Decorator) @author ixenos 装饰模式是什么 1.装饰模式以对客户端透明的方式对象的功能,是继承关系的一个替代方案,但装饰模式可以在不创造更多子类的情况下,对 ...

  7. 设计模式系列之装饰模式(Decorator Pattern)

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类,用来包装原 ...

  8. 装饰模式(Decorator pattern)

    装饰模式(Decorator pattern): 又名包装模式(Wrapper pattern), 它以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式以对客户透明的方式动态的给 ...

  9. 基于东北F4的设计模式情景剧——第一幕 装饰模式(Decorator Pattern)

    第一场 难题未解 布景:铁岭,晴天,午后,风.在一幢还算气派的写字楼的三层外墙上,挂着一条红色横幅,上面用歪歪扭扭的毛笔字写着"东北F4软件外包工作室".大风中,那早已褪色的条幅剧 ...

随机推荐

  1. naginx安装入门

    一.nginx是什么 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件.它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用. nginx比它大哥apach ...

  2. Java 不可变对象

    不可变对象(immutable objects):一旦对象被创建,它们的状态就不能被改变(包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变),每次对他 ...

  3. C语言两种方式实现矩阵的转置

    #include"stdio.h" typedef struct{ int i,j; int v; }Triple; typedef struct{ Triple date[]; ...

  4. linux 入门命令总结

    1,tree -d /etc/ 参数表示只显示目录 -f 显示内容的完整 -i 不显示树枝显示完整路径2,mkdir -p 递归创建多级目录 -v 显示创建目录的过程 -m 设置目录的默认权限 mkd ...

  5. TT8509: PL/SQL execution terminated; PLSQL_TIMEOUT exceeded

    TT8509: PL/SQL execution terminated; PLSQL_TIMEOUT exceeded plsql_timeout连接超时,解决办法: ODBC pl/sql选项卡 修 ...

  6. Android应用程序组件之间的通信Intent和IntentFilter

    Android应用程序的基本组件,这些基本组建除了Content Provider之外,几乎全部都是依靠Intent对象来激活和通信的. 下面介绍Intent类,并通过例子来说明Intent一般用法 ...

  7. 委托delegate 泛型委托action<> 返回值泛型委托Func<> 匿名方法 lambda表达式 的理解

    1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyB ...

  8. File类--随笔

    package io; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; im ...

  9. jQuery中的动画——《锋利的JQuery》

    自CSS3以来,主流网站开始偏向于扁平风格和动画效果,这时就可以jQuery的动画就可以发挥其长处了,灵活的应用其动画API,让我们可以设计出很多绚丽的效果.下面,让我们来列举一些jQuery常用的动 ...

  10. Java中使用MongoUtils对mongodb数据库进行增、删、查、改

    本文主要介绍在java应用中如何使用MongoUtils工具类对 mongodb进行增.删.查.改操作. 一.配置 1.将 common.jar库引入到项目环境中: (源代码:https://gite ...