`

[原]装饰模式1

阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》学习,decorator,装饰模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com)
[正文]:


package pattern.decorator;

/**
 * 装饰模式:Decorator Pattern
 * @version 2009-6-5
 * @author Winty(wintys@gmail.com)
 */
public class DecoratorTest{
    public static void main(String[] args){
        Component component;
        component = new ConcreteComponent();
        component.doSomething();
        System.out.println("");
        
        //透明的装饰模式
        Component decorator;
        decorator = new ConcreteDecorator(component);
        decorator.doSomething();
        System.out.println("");

        //半透明的装饰模式
        ConcreteDecorator decorator2;
        decorator2 = new ConcreteDecorator(component);
        decorator2.doSomething();
        decorator2.doOtherThings();
    }
}


/**
 * 抽象构件:Component
 */
interface Component{
    public abstract void doSomething();
}

/**
 * 具体构件:ConcreteComponent
 */
class ConcreteComponent implements Component{
    @Override
    public void doSomething(){
        System.out.println("do something");
    }
}

/**
 * 装饰:Decorator
 */
abstract class Decorator implements Component{
    private Component comp;

    public Decorator(Component comp){
        this.comp = comp;
    }

    @Override
    public void doSomething(){
        comp.doSomething();
    }
}

/**
 * 具体装饰:ConcreteDecorator
 */
class ConcreteDecorator extends Decorator{
    public ConcreteDecorator(Component comp){
        super(comp);
    }

    @Override
    public void doSomething(){
        super.doSomething();
        doMoreThings();
    }

    private void doMoreThings(){
        System.out.println("do more things.");
    }

    /**
     * 新增的方法不是Component接口的一部分,
     * 所以不能通过Component接口透明地访问。
     */
    public void doOtherThings(){
        System.out.println("do other things.");
    }
}
  • 大小: 46.5 KB
分享到:
评论

相关推荐

    HeadFirst 设计模式学习笔记3--装饰模式 Demo

    装饰模式的运作过程通常是这样的:首先创建一个Concrete Component对象,然后通过一系列具体装饰器来包装这个对象,每次添加一个新的装饰器,就会为原对象增加一层新的功能。因为装饰器和具体组件都实现了相同的接口...

    RPG与设计模式(一)装饰模式 的源码

    首先,装饰模式的核心在于它维护了对象的原始接口,这意味着你可以将装饰对象当作原对象使用。在Java中,这通常通过实现相同的接口或继承相同的基类来实现。例如,一个基础的`Character`接口或类定义了所有角色的...

    装饰模式简单例子

    这样,我们就使用装饰模式成功地为原咖啡添加了新功能,而且代码可读性好,易于维护和扩展。在实际的IT项目中,装饰模式经常用于日志记录、权限控制、性能监控等场景,因为它允许我们在不修改核心业务逻辑的情况下,...

    23种设计模式--装饰模式

    装饰模式是一种结构型设计模式,它是面向对象设计中用来动态添加或修改对象功能的一种方法。在软件工程中,装饰模式允许我们向一个现有的对象添加新的行为或职责,同时又不改变其原有的结构,从而实现对类的功能扩展...

    设计模式之装饰模式:以售卖咖啡为例

    装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或属性,而不必修改原有类的代码。这种模式的核心在于装饰者和组件接口的统一,使得装饰者可以替代原对象并添加额外的功能。在"设计模式之...

    装饰者模式 code

    装饰者模式的核心在于创建一个与原对象行为相似的新对象,这个新对象可以包含原对象,并添加额外的功能。装饰者通常是一个抽象类或接口,定义与原对象相同的方法,以便保持与原对象的行为一致性。装饰者模式可以用来...

    设计模式-装饰器模式

    4. 具体装饰(Concrete Decorator):添加了具体组件的新行为,是装饰模式的关键,它实现了抽象组件接口,并在需要的地方调用具体组件的方法。 举个例子,假设我们有一个`Drink`接口,`Coffee`是具体饮料,`...

    装饰、外观模式实例代码

    装饰模式的核心在于创建一个与原类具有相同接口的新类(装饰类),并将其作为原类的一个包装,从而在不改变原类的基础上扩展其功能。这种方式避免了对原类进行大量修改,保持了代码的开放性和封闭性。 在`...

    软件设计模式—装饰者模式

    这种模式的核心思想是通过将对象包装在一个装饰类中来扩展其功能,装饰类与被装饰类具有相同的接口,因此在客户端代码中可以透明地替换原对象。 在Java中,I/O流处理是一个常见的应用场景,它涉及到数据的输入和...

    JAVA设计模式学习12——装饰器模式

    2. **动态性**:装饰模式允许我们在运行时动态地为对象添加新功能,而无需修改代码。 3. **组合性**:通过多个装饰者的叠加,可以实现更复杂的功能,这比使用继承来扩展功能更加灵活。 4. **职责分离**:装饰者模式...

    java装饰模式及动态代理模式示例源码

    在Java中,装饰模式通常通过继承实现,一个装饰类会持有原对象的引用,并在其基础上增加新的方法或增强已有方法。例如,在数据库连接池中,我们可以创建一个基础的数据库连接类,然后通过装饰器类来添加连接池管理的...

    23设计模式之装饰器模式-前端篇.pptx

    装饰模式是一种设计模式,主要目的是在不改变原有对象结构的情况下,动态地为对象添加新的功能。它在软件工程中扮演着一个"增强"的角色,允许我们以优雅的方式扩展对象的行为,而无需修改对象的源代码。在前端...

    iOS 设计模式 装饰模式

    装饰模式是一种结构型设计模式,通过将一个对象包裹在一个装饰类中,装饰类可以增加、修改或增强原对象的功能。与继承相比,装饰模式具有更大的灵活性,因为可以通过叠加多个装饰类来实现更复杂的组合功能,而不会...

    装饰者模式

    装饰者模式的工作原理是,当需要改变或扩展一个对象的行为时,我们创建一个新的装饰者对象,这个装饰者持有对原对象的引用,然后在需要的地方添加新的行为。装饰者和原对象都实现了相同的接口,因此客户端代码可以...

    装饰者模式代码demo

    这种模式通过将对象包装在一个装饰类中来实现,装饰类与原类有相同的接口,因此可以透明地替换或增强原有对象的功能。 在“装饰者模式代码demo”中,我们可以期待看到以下组件: 1. **Component接口/抽象类**:这...

    设计模式之装饰模式

    1. **开闭原则**:装饰模式遵循开闭原则,对扩展开放,对修改关闭。我们可以在不修改原有代码的情况下,通过添加新的装饰者来扩展功能。 2. **灵活性**:装饰者提供了比继承更多的灵活性,因为我们可以根据需要组合...

    设计模式系列之装饰模式

    装饰模式是一种结构型设计模式,它允许在运行时动态地为对象添加新的行为或职责,同时保持对象的接口不变。这种模式在不修改原有代码的基础上,通过组合而非继承来扩展对象的功能,避免了类爆炸的问题。 装饰模式的...

    java设计模式之装饰模式

    装饰模式的核心思想是用一个包装类包裹原对象,这个包装类与原对象具有相同的接口,从而可以在不改变原有对象的基础上,通过包装类添加额外的功能。 博客链接提供的文章详细分析了装饰模式的源码,下面是对装饰模式...

    装饰者模式的典型应用。

    这种模式常被用于扩展或增强对象的功能,而无需修改原对象的代码,符合“开闭原则”。在Java的SSL(Secure Socket Layer)安全通信中,X509TrustManagerWrapper.java就是一个典型的装饰者模式应用示例。 X509...

    游戏设计3-装饰者模式-装备

    装饰者模式的核心思想是将一个对象包装在一个装饰器对象中,装饰器对象拥有与原对象相同的接口,这样就可以透明地对原对象进行增强,同时保持原有功能不变。 首先,我们需要定义一个基础装备类(BaseEquipment),...

Global site tag (gtag.js) - Google Analytics