之所以关注这个模式,是因为最近对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
分享到:
相关推荐
在Java编程语言中,IO流(Input/Output Stream)是处理数据输入和输出的主要机制,而Decorator设计模式是一种结构型设计模式,它允许我们在运行时动态地给对象添加新的行为或责任。这两种概念的结合使得Java IO系统...
java Decorator设计模式应用,可以简单了解它,初学者入。
博文链接:https://your.iteye.com/blog/133420
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
设计模式是软件工程中的一种重要思想,用于解决常见的设计问题并提供可重用的解决方案。在Java等面向对象的语言中,设计模式可以帮助我们编写出更灵活、可维护和可扩展的代码。本课件主要讲解了三种创建型设计模式:...
"大话西游之设计模式_从猴王学艺看Decorator"这篇文章将设计模式的概念与经典电影《大话西游》中的故事相结合,以生动有趣的方式讲解了Decorator模式。猴王学艺的过程,就如同我们在编程中逐步增加对象的能力,通过...
Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...
在给定的“设计模式 t07Decorator”主题中,我们聚焦于装饰者模式(Decorator Pattern)。装饰者模式是一种结构型设计模式,它允许我们在运行时给对象添加新的行为或职责,而无需修改其原有代码。这种模式遵循开闭...
设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。在本文中,我们将深入探讨24种设计模式,并结合混合设计模式的概念,以及它们在实际项目中的应用案例。 首先,设计...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之...
这个压缩包文件"设计模式(包含5个设计模式)含源代码报告.rar"显然是一份宝贵的资源,它涵盖了五个核心的设计模式,并附带了详细的类图、源代码以及文档报告,这对于学习和理解设计模式至关重要。 首先,我们要探讨...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...
通过一步步完善的代码示例,由浅入深地讲解了16个设计模式,包括 singleton模式、Factory模式、Abstract Factory模式、Builder模式、Prototype模式、Adapter模式、Bridge模式、Composite模式、Decorator模式、...
设计模式详解 设计模式是软件开发中的一种解决方案,旨在提高代码的可重用性、可维护性和可扩展性。在这篇文章中,我们将对23种常见的设计模式进行整理和解释。 1. Singleton 模式 Singleton 模式是一种创建型模式...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要资源分。敬请期待。 这是第10节:结构型...
Java设计模式中的Builder模式和Decorator模式是两种重要的设计模式,它们在软件开发中起到优化代码结构、提高代码复用性和灵活性的作用。 1. 建造者模式(Builder) 建造者模式是一种创建型设计模式,它的主要目的...
装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...