前言:【模式总览】——————————by xingoo

  模式意图

  在不改变原来类的情况下,进行扩展。

  动态的给对象增加一个业务功能,就功能来说,比生成子类更方便。

  应用场景

  1 在不生成子类的情况下,为对象动态的添加某些操作。

  2 处理一些可以撤销的职责。

  3 当不能使用生成子类来扩充时。

  模式结构

  Component 外部接口,用于定义外部调用的形式。提供默认的处理方法。

interface Component{
public void operation();
}

  ConcreteComponent  具体的处理类,用于实现operation方法。

class ConcreteComponent implements Component{

    @Override
public void operation() {
// TODO Auto-generated method stub
System.out.println("ConcreteComponent operation()");
} }

  Decorator 装饰类,内部关联一个component对象,调用其operation方法,并添加自己的业务操作。

class Decorator implements Component{
private Component component;
@Override
public void operation() {
// TODO Auto-generated method stub
System.out.println("before decorator!");
component.operation();
System.out.println("after decorator!");
}
public Decorator() {
// TODO Auto-generated constructor stub
}
public Decorator(Component component){
this.component = component;
} }

  全部代码

 package com.xingoo.decorator;
interface Component{
public void operation();
}
class ConcreteComponent implements Component{ @Override
public void operation() {
// TODO Auto-generated method stub
System.out.println("ConcreteComponent operation()");
} }
class Decorator implements Component{
private Component component;
@Override
public void operation() {
// TODO Auto-generated method stub
System.out.println("before decorator!");
component.operation();
System.out.println("after decorator!");
}
public Decorator() {
// TODO Auto-generated constructor stub
}
public Decorator(Component component){
this.component = component;
} } public class test {
public static void main(String[] args) {
Component component = new Decorator(new ConcreteComponent());
component.operation();
}
}

  运行结果

before decorator!
ConcreteComponent operation()
after decorator!

【设计模式】—— 装饰模式Decorator的更多相关文章

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

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

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

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

  3. [工作中的设计模式]装饰模式decorator

    一.模式解析 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的要点主要是: 1.需要对已有对象扩展新的功能,又不希望改变原有对 ...

  4. 设计模式——装饰模式(Decorator Pattern)

    装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. UML图: 模型类: Component类: package com.cnblog.clarck; /** ...

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

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

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

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

  7. 深入浅出设计模式——装饰模式(Decorator Pattern)

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

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

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

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

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

  10. 装饰模式decorator

    C++设计模式——装饰模式 前言 在实际开发时,你有没有碰到过这种问题:开发一个类,封装了一个对象的核心操作,而这些操作就是客户使用该类时都会去调用的操作:而有一些非核心的操作,可能会使用,也可能不会 ...

随机推荐

  1. windows10 + anaconda + tensorflow-1.5.0 + python-3.6 + keras-2.2.4配置和安装

    windows10 + anaconda + tensorflow-1.5.0 + python-3.6 + keras-2.2.4配置和安装 (base) C:\Users\jiangshan> ...

  2. Tomcat主页404错误

    单独启动Tomcat正常,但是通过Eclipse启动(这时启动也是正常的)后,访问Tomcat主页报404错误. 在网上找到了解决办法:http://www.jb51.net/article/8283 ...

  3. P1726 上白泽慧音

    题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间 ...

  4. MVC 在action拦截器中获取当前进入的控制器和aciton名

    我们在实现了action拦截器以后(继承至System.Web.Mvc.IActionFilter),需要在重写的方法OnActionExecuting中去获得当前进入的控制器和action名称,如何 ...

  5. 蜻蜓fm面试

    一面: 面试官首先看简历上写了在腾讯的实习,然后就探讨了半天,各种虚拟化的技术.... 说完之后,估计都半小时过去了,然后就又说了一下你用什么语言,你做的东西都比较偏底层呢,然后你对工作有什么要求吗? ...

  6. 【LeetCode21】Merge Two Sorted Lists★

    1.题目描述: 2.解题思路: 本题是要合并两个已经有序的单链表,思路很简单,有两种方法:非递归和递归. 3.Java代码: (1)非递归: 为方便操作,定义一个辅助的头节点,然后比较原来两个链表的头 ...

  7. Maven私有仓库-使用docker部署Nexus

    查看官方镜像说明 nexus2 nexus3 建议使用nexus2,可能网上的资料这个版本居多. 我选择的是nexus3,~~~ 启动容器 官方说明中提到的是使用docker直接启动.我选择用dock ...

  8. Python3入门(五)——高级特性

    一.切片 对于取指定索引的值,python提供了切片来简化傻傻的循环 list2 = ["apple", "water", "banana" ...

  9. 20155234《网路对抗》Exp9 WEB安全基础

    20155234 Exp9 Web安全基础 基础问答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意 ...

  10. 汇编 OD 调式

    OD调试  命令栏指令 一.OD调试 重新开始:Ctrl+F2 转到地址:CTRL+G 断点切换: F2 断点窗口: Alt+B 运行 : F9 暂停 : F12 单步步过: F8 //遇到CAL ...