文档章节

设计模式 -- 装饰模式

偶尔诗文
 偶尔诗文
发布于 2016/10/12 10:25
字数 399
阅读 26
收藏 0

1,定义:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.􏰈􏰾􏰱􏲌􏴍􏰓􏰔􏰢􏰣􏸅􏶤􏰓􏲓􏸆􏳮􏰅􏲝􏷢􏱁 􏱺􏶣􏶤􏸇􏱩􏱈􏱣􏰝􏱓􏱔􏰃􏰄􏶍􏱱􏶲􏱗􏳏􏱂􏰿􏳜􏸈􏸉􏱁􏰉(动态的给一个对象添加其他职责,就增加功能来说,装饰模式比生成子类更加灵活)

 

2,通用类图

 

3,实例代码:


/**
   抽象组件
**/
public abstract class Component {
    public abstract void operate();
}

/**
  具体组件实现类
**/
public class ExecuteComponent extends Component{
    @Override
    public void operate() {
        System.out.println("我是真正的执行组件");
    }
}

/**
  装饰组件类
**/
public class Decorator extends Component{
    private Component component;
    public Decorator(Component component){
        this.component = component;
    }

    @Override
    public void operate() {
        component.operate();
    }
}

/**
 具体装饰类1
**/
public class ExecuteDecoratorOne extends Decorator{
    public ExecuteDecoratorOne(Component component) {
        super(component);
    }
    @Override
    public void operate() {
        System.out.println("装饰类1");
        super.operate();
    }
}
/**
 具体装饰类2
**/
public class ExecuteDecoratorTwo extends Decorator{
    public ExecuteDecoratorTwo(Component component) {
        super(component);
    }
    @Override
    public void operate() {

        System.out.println("装饰类 2");
        super.operate();
    }
}

/**
  模式使用
**/
public class Clent {
    public static void main(String[] args){
        Component component = new ExecuteComponent();
        Component component1 = new ExecuteDecoratorOne(component);
        Component component2 = new ExecuteDecoratorTwo(component1);
        component.operate();
        System.out.println("-----------------");
        component1.operate();
        System.out.println("-----------------");
        component2.operate();
    }
}

/**
  运行结果
**/
我是真正的执行组件
-----------------
装饰类1
我是真正的执行组件
-----------------
装饰类 2
装饰类1
我是真正的执行组件


4,模式角色

(1)抽象构件:􏰒􏰓􏰔􏱬􏹑􏱥􏰂􏰒􏵎􏰣􏱂􏰝􏱺􏰒􏰆􏰇􏱅􏱆􏲎􏳹􏳴􏰅􏰢􏰣􏰝􏰊􏱺􏰒􏲎􏵪􏵧􏰅􏰢 一个接口或者抽象类,定义我们最核心的对象。

(2)具体构件:是抽象构件的实现,一般装饰的就是这玩意

(3)装饰角色:一般是一个抽象类,也继承了抽象构件,一般会有一个私有方法依赖抽象构件

(4)具体装饰角色:继承装饰角色,对具体构件进行装饰,或者对装饰角色进行装饰

© 著作权归作者所有

上一篇: 红黑树
偶尔诗文
粉丝 12
博文 145
码字总数 63966
作品 0
沈阳
高级程序员
私信 提问
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
Java之23种设计模式解析(二)

B、结构模式(7 种) 我们接着讨论设计模式,上篇文章我讲完了 5 种创建型模式,这章开始,我将讲下 7 种结构型模式:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模...

wersdffg
2015/02/15
0
0
JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模式、工厂方法模式、单例设计模式之饿汉式和懒汉式、Runtime类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52717096 JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模...

Aduroidpc
2016/10/01
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
JavaScript常用设计模式

设计模式 设计模式是一种在长时间的经验与错误中总结出来可服用的解决方案。 设计模式主要分为3类: 创建型设计模式:专注于处理对象的创建 Constructor构造器模式,Factory工厂模式,Singl...

a独家记忆
2018/07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二、Docker

1、Docker - The TLDR(Too Long,Don't Read,Linxu 终端工具 ) Docker是在Linux和Windows上运行的软件。它创建、管理和编排容器。该软件以开源方式开发,在Github上作为Moby开源项目的一部分。...

倪伟伟
26分钟前
2
0
Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
今天
5
0
Guava RateLimiter限流源码解析和实例应用

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高...

算法之名
今天
13
0
国产达梦数据库与MySQL的区别

背景 由于项目上的需要,把项目实现国产化,把底层的MySQL数据库替换为国产的达梦数据库,花了一周的时间研究了国产的数据库-达梦数据库,它和MySQL有一定的区别,SQL的写法也有一些区别。 ...

TSMYK
今天
2
0
老也有错?35岁程序员是一道坎,横亘在每个技术职场人的心中

随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论。很多程序员在工作5-10年以后,都会开始思考5年、10年甚至更久以后的自己,会是怎样一种生活工作状态,以及是否会被时代抛...

我最喜欢三大框架
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部