`
il2
  • 浏览: 5081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Decorator设计模式

阅读更多
    之所以关注这个模式,是因为最近对java的io感兴趣,因此上网查资料,而所有相关的资料都提到了该模式,咱一看不认识啊,于是注意力就到这个模式上了(想不想超链接的功能?)。
    Decorator设计模式主要是为了增强某个特定类的功能。比如在原有操作之前或者之后增加一些操作等等。引入继承可以解决这个问题,即通过在子类里使用重载来实现。引入了继承的好处,同时也引入了继承的缺点,而Decorator模式就是为了解决继承的缺点而生的。

     这里有一个例子:
     这里模拟我们开发人员最熟悉的一个场景:软件工程领域的人力资源情况。
     先看图:



Engineer是一个接口。

package org.forefficiency.pattern.decorator;

public interface Engineer {

    public void doCodding();
}

Coder是代码工人,有写代码的功能:doCodding() 方法。
package org.forefficiency.pattern.decorator;

public class Coder implements Engineer
{

    public void doCodding() {
        System.out.println("--I am codding!");
    }

}




现在发现人手不够用了,要求代码工人要在写代码之前做设计,或者写完了代码要写文档。

于是增加一个Coder的兄弟:MultiRoleEngineer。

package org.forefficiency.pattern.decorator;


public class MultiRoleEngineer implements Engineer{

    protected Engineer coder;
    public void doCodding() {
        doDesign();
        coder.doCodding();
        doFile();
    }

    public MultiRoleEngineer(Engineer cod)
    {
        this.coder = cod;
    }

    public void doDesign()
    {
        System.out.println("--I am doing design!");
    }

    public void doFile()
    {
        System.out.println("--I am doing file work!");
    }
}


MultiRoleEngineer和Coder都实现Engineer接口。
注意MultiRoleEngineer本身拥有一个Engineer的成员属性,通过构造方法来初始化该属性。
MultiRoleEngineer有2个子类,DesignCode和CodeFile,在这两个子类里重写doCodding() 方法。


package org.forefficiency.pattern.decorator;


public class DesignCode extends MultiRoleEngineer {

    public DesignCode(Engineer cod) {
        super(cod);
    }

    public void doCodding() {
        doDesign();
        coder.doCodding();
    }

    public void doDesign() {
        System.out.println("--I am doing design!");
    }

}



package org.forefficiency.pattern.decorator;

public class CodeFile  extends MultiRoleEngineer
{
    public CodeFile(Engineer cod)
    {
        super(cod);
    }
        public void doCodding() {
        coder.doCodding();
        doFile();
    }


    public void doFile()
    {
        System.out.println("--I am doing file work!");
    }
}





进行测试:


package org.forefficiency.pattern.decorator;


public class Test {
    public static void main(String[] args)
    {
        Engineer cod = new Coder();
        Engineer designCoder = new DesignCode(cod);

        designCoder.doCodding();



        designCoder = new CodeFile(cod);

        designCoder.doCodding();
    }
}


运行结果:
run:
--I am doing design!
--I am codding!
--I am codding!
--I am doing file work!
成功生成(总时间:0 秒)

  • 大小: 53 KB
0
0
分享到:
评论

相关推荐

    IO流所涉及到的Decorator设计模式

    在Java编程语言中,IO流(Input/Output Stream)是处理数据输入和输出的主要机制,而Decorator设计模式是一种结构型设计模式,它允许我们在运行时动态地给对象添加新的行为或责任。这两种概念的结合使得Java IO系统...

    java Decorator设计模式应用

    java Decorator设计模式应用,可以简单了解它,初学者入。

    设计模式之Decorator

    博文链接:https://your.iteye.com/blog/133420

    设计模式之 Decorator模式和代码实现

    【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...

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

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    设计模式讲解课件PPT

    设计模式是软件工程中的一种重要思想,用于解决常见的设计问题并提供可重用的解决方案。在Java等面向对象的语言中,设计模式可以帮助我们编写出更灵活、可维护和可扩展的代码。本课件主要讲解了三种创建型设计模式:...

    大话西游之设计模式_从猴王学艺看Decorator 配套代码

    "大话西游之设计模式_从猴王学艺看Decorator"这篇文章将设计模式的概念与经典电影《大话西游》中的故事相结合,以生动有趣的方式讲解了Decorator模式。猴王学艺的过程,就如同我们在编程中逐步增加对象的能力,通过...

    Java设计模式之-Decorator装饰模式

    Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...

    设计模式 t07Decorator

    在给定的“设计模式 t07Decorator”主题中,我们聚焦于装饰者模式(Decorator Pattern)。装饰者模式是一种结构型设计模式,它允许我们在运行时给对象添加新的行为或职责,而无需修改其原有代码。这种模式遵循开闭...

    24种设计模式以及混合设计模式

    设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。在本文中,我们将深入探讨24种设计模式,并结合混合设计模式的概念,以及它们在实际项目中的应用案例。 首先,设计...

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    JAVA设计模式chm文档

    设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之...

    设计模式(包含5个设计模式)含源代码报告.rar

    这个压缩包文件"设计模式(包含5个设计模式)含源代码报告.rar"显然是一份宝贵的资源,它涵盖了五个核心的设计模式,并附带了详细的类图、源代码以及文档报告,这对于学习和理解设计模式至关重要。 首先,我们要探讨...

    java Decorator装饰模式例子

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...

    JavaScript设计模式与开发实践.pdf

    通过一步步完善的代码示例,由浅入深地讲解了16个设计模式,包括 singleton模式、Factory模式、Abstract Factory模式、Builder模式、Prototype模式、Adapter模式、Bridge模式、Composite模式、Decorator模式、...

    23种设计模式整理pdf

    设计模式详解 设计模式是软件开发中的一种解决方案,旨在提高代码的可重用性、可维护性和可扩展性。在这篇文章中,我们将对23种常见的设计模式进行整理和解释。 1. Singleton 模式 Singleton 模式是一种创建型模式...

    C#面向对象设计模式纵横谈\10 结构型模式Decorator装饰模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要资源分。敬请期待。 这是第10节:结构型...

    java设计模式之Builder&Decorator

    Java设计模式中的Builder模式和Decorator模式是两种重要的设计模式,它们在软件开发中起到优化代码结构、提高代码复用性和灵活性的作用。 1. 建造者模式(Builder) 建造者模式是一种创建型设计模式,它的主要目的...

    c++-设计模式之装饰模式(Decorator)

    装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...

Global site tag (gtag.js) - Google Analytics