【设计模式】—— 装饰模式Decorator

  模式意图

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

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

  应用场景

  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;
    }

}

  全部代码

 1 package com.xingoo.decorator;
 2 interface Component{
 3     public void operation();
 4 }
 5 class ConcreteComponent implements Component{
 6
 7     @Override
 8     public void operation() {
 9         // TODO Auto-generated method stub
10         System.out.println("ConcreteComponent operation()");
11     }
12
13 }
14 class Decorator implements Component{
15     private Component component;
16     @Override
17     public void operation() {
18         // TODO Auto-generated method stub
19         System.out.println("before decorator!");
20         component.operation();
21         System.out.println("after decorator!");
22     }
23     public Decorator() {
24         // TODO Auto-generated constructor stub
25     }
26     public Decorator(Component component){
27         this.component = component;
28     }
29
30 }
31
32
33 public class test {
34     public static void main(String[] args) {
35         Component component = new Decorator(new ConcreteComponent());
36         component.operation();
37     }
38 }

  运行结果

before decorator!
ConcreteComponent operation()
after decorator!

 

本文转自博客园xingoo的博客,原文链接:【设计模式】—— 装饰模式Decorator,如需转载请自行联系原博主。

时间: 2024-09-23 01:53:44

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

C++ 设计模式 装饰模式(Decorator Pattern)

C++ 设计模式 装饰模式 在结构型模式中装饰模式给我留下了深刻的印象,其中也感觉到在设计模式中基本都是 依赖C++的多态来实现,装饰模式也不例外,他允许在不改变原有类的代码的基础上, 不通过直接继承原有类的代码通过一个抽象接口层进行实现,甚至可以随意的组合, 所以这里记录之以备使用 下面是模型图: 下面是一个简单的模拟代码,模拟本来一个工具只有写功能,但是我们要不断的扩充其 功能让它有听有读的功能: 这是跑出来的结果 ----source tool---- i can write!! ----

解读设计模式----装饰模式(Decorator Pattern)

装饰模式(Decorator)也叫包装器模式(Wrapper).以"装饰"的含义生动形象地描绘了"动态地给一个对象添加一些额外的职责"的意图.GOF在<设计模式>一书中给出的定义为:动态地给一个对象添加一些额外的职责.装饰模式充分利用了继承和聚合的优势,创造出无与论比的设计美学.就增加功能来说,Decorator模式相比生成子类更为灵活. UML图: 一.使用Decorator模式的动机 现在有这样一个场景,要求我们为一个对象动态添加新的职责,这个职责并

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

原文:乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) 作者:webabcd 介绍 动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活. 示例 有一个Message实体类,某个对象对它的操作有Insert()和Get()方法,现在扩展这个对象的功能. MessageModel using System;using System.Collecti

温故而知新:设计模式之装饰模式(Decorator)

小时候对日本的动画片十分着迷,"圣斗士"是我的最爱:长大后也曾经一度对"海贼王"十分痴迷:大学看武侠小说时,也特别喜欢那种主人公有奇遇的情况:吃到一颗千年异果,然后功夫大增60年... 这些个场景都有一个共同点:对象(或系统)会因为一些需求(通常这些需求之间没有任何关联),而扩展自己的功能.具体来说:青铜战士如果有幸能穿上黄金圣衣,不管你是不是黄金圣斗士,在穿上黄金圣衣的那一刻,你就具有黄金圣斗士的能力:海赋王中的人物,如果能吃到一颗奇异果,就能获得特别的能力(比如

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

装饰模式(Decorator Pattern) --.NET设计模式系列之十 Terrylee,2006年3月 概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性:并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀.如何使"对象功能的扩展"能够根据需要来动态地实现?同时避免"扩展功能的增多"带来的子类膨胀问题?从而使得任何"功能扩展变化"所

C#设计模式之装饰设计模式(Decorator)

一.装饰(Decorator)模式 装饰(Decorator)模式又名包装(Wrapper)模式[GOF95].装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 引言 孙悟空有七十二般变化,他的每一种变化都给他带来一种附加的本领.他变成鱼儿时,就可以到水里游泳:他变成雀儿时,就可以在天上飞行.而不管悟空怎么变化,在二郎神眼里,他永远是那只猢狲. 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同.装饰模式可以在

Java设计模式--装饰模式

装饰模式(别名:包装类) 动态地给对象添加一些额外的职责.就功能来说装饰模式相比生成子类更为灵活. Decorator Pattern(Another Name: Wrapper) Attach additional responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality. 类图 模式的结构与使用 装

设计模式-装饰模式遇到的问题,大神求教

问题描述 装饰模式遇到的问题,大神求教 求问大神一个关于设计模式的问题,我用装饰模式实现给一个人的具体对象穿衣服,穿鞋子,那么问题来了,我怎么实现把鞋子脱了 解决方案 装饰模式是对原有功能的增强,它的本质是不改变原有类结构的情况下对原来的某个功能的增强处理.所以就你描述的需求,它还是只能提供穿衣服,穿鞋子的原有功能,但是可能有增强操作,比如穿衣服之前先把衣服整平,穿鞋后擦擦鞋子.它不会凭空多出一个新功能的,因为它实现的还是你原有的接口,只是实现功能超过原有功能而已. 解决方案二: 求问大神一个关

炒冷饭系列:设计模式 装饰模式

一.什么是抽象工厂模式 装饰( Decorator )模式又叫做包装模式.通 过一种对客户端透明的方式来扩展对象的功能, 是继承关系的一个替换方案. 二.装饰模式的结构 角色和职责 以下是对此图的见解,不服别喷.Component是实体接口 或者 抽象类.左边的ConcreteComponent是其实现(功能).Decorator装饰,所谓的装饰抽象类就是把接口类实现,然后加上DoSomething的模块. 然后下面就是各个对具体装饰的实现,如果需要多功能结合 不是相互结合,而是通过父类抽象结合