`

结构型——Decorator(装饰模式)

阅读更多

Decorator 模式动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。JAVA类库IO设计就采用Decorator 模式。

Decorator模式UML图

 

对于客户端来说,ConcreateComponent与Decorator的行为是一样的。可以在Decorator及子类中添加不同的行为。

源码如下:

public interface Work {

	void insert();
}

 

 

实现类:

 

public class SimpleWork implements Work {

	public void insert(){
		System.out.println("simple insert");
	}
}

 

 

装饰类:

public class DecoratorWork implements Work {

	private Work work;
	
	public DecoratorWork(Work work){
		this.work = work;
	}
	
	public void insert() {

		work.insert();
	}
	


}

 具体装饰类:

public class ConCreateDecorator extends DecoratorWork {

	public ConCreateDecorator(Work work) {
		super(work);
	}
	public void insert(){
		insertB();
		
		super.insert();
		insertA();
	}

	public void insertB(){
		System.out.println("B insert");
	}
	
	public void insertA(){
		System.out.println("A insert");
	}
}

 

测试类:

public class Test {

	public static void main(String[] args) {
		Work work = new SimpleWork();
		Work work1 = new DecoratorWork(work);
		work1.insert();		//---1
		
		work.insert();		//---2 与1中输出结果一致
		
		Work work2 = new ConCreateDecorator(work);
		work2.insert();//添加了新的行为
	}
}

 

结果为:

simple insert
simple insert
B insert
simple insert
A insert

 

 在上例中不难发现,DecoratorWork 类实现了Work类,但是在DecoratorWork 类里又把Work类作为它的一个属性,这是为什么呢?

    这是因为继承能使类型保持一致,而我们要灵活的使用类的行为则需要使用组合。

java.io包中就使用了些模式

我们可以继承FilterInputStream,并在自己的类中加入行为。装饰它

分享到:
评论

相关推荐

    装饰者模式——Decorator

    在博客文章“装饰者模式——Decorator”中,作者可能详细讲解了以下几个方面: 1. 装饰者模式的基本概念和原理。 2. 如何通过代码示例展示装饰者模式的实现。 3. 装饰者模式与继承的区别和优势。 4. 装饰者模式在...

    装饰模式——装饰模式.doc

    装饰模式是一种设计模式,属于结构型模式,其主要目的是在不改变对象本身的基础上,通过向对象添加新的行为或属性来扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭。 在装饰模式中,有四个关键...

    C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式)

    ### C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式) #### 一、背景介绍 在面向对象编程中,设计模式是一种在特定情况下解决问题的标准化方法。其中,装饰模式(Decorator Pattern)作为结构型模式...

    设计模式——装饰模式

    装饰模式是一种设计模式,它是结构型模式的一种,用于在运行时动态地给对象添加新的功能,而无需修改对象的原有代码。这种模式的核心思想是通过将对象包装在另一个对象中来扩展其行为,同时保持接口不变,使得客户端...

    C#设计模式——装饰模式应用实例

    装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或属性,而不必修改原有类的代码。在C#中,装饰模式常用于扩展对象的功能,同时保持对象接口的一致性。本实例是关于如何在开发图形界面构件库...

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的核心思想是通过将对象封装在一个包装器(Decorator)中来扩展其行为,而包装器和原始...

    design-pattern-java.pdf

    树形结构的处理——组合模式(二) 树形结构的处理——组合模式(三) 树形结构的处理——组合模式(四) 树形结构的处理——组合模式(五) 装饰模式-Decorator Pattern 扩展系统功能——装饰模式(一) 扩展系统...

    装饰器(Decorator)模式

    这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术,尤其在不破坏原有类结构的情况下扩展功能时显得尤为重要。 在Python编程语言中,装饰器是一个特殊类型的函数,它可以修改或增强其他函数的功能。...

    设计模式之装饰模式.docx

    装饰模式(Decorator Pattern)是一种结构型设计模式,用于动态地给一个对象添加一些额外的职责。该模式允许在不修改原有对象的情况下,动态地改变对象的行为。 定义与结构 装饰模式由四个角色组成: 1. 抽象构件...

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

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

    设计模式之装饰模式Java实现和类设计图

    装饰模式是一种结构型设计模式,它允许在运行时给对象添加新的行为或责任,而无需修改原有代码。这种模式在软件工程中极为重要,因为它遵循了开闭原则——对扩展开放,对修改关闭。在Java中,装饰模式通常通过继承和...

    设计模式代码——c#

    8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型 13. 模板方法(Template Method) ...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    2. **结构型模式**:如适配器(Adapter)、装饰器(Decorator)、代理(Proxy)、桥接(Bridge)、组合(Composite)、外观(Facade)和享元(Flyweight)。这些模式处理对象的组合和关系,提供更好的结构和接口,...

    java 装饰模式 设计模式

    装饰模式是一种结构型设计模式,它允许在不改变对象本身的基础上,在运行时为对象添加新的功能。这种模式常被用于给对象动态地增加职责,尤其是当需要为对象添加多个职责时,比继承更加灵活且避免了类的爆炸性增长。...

    X-gen PPT下载——《研磨设计模式》 实战

    2. **结构型模式**:如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式处理对象之间的关系...

    设计模式可复用面向对象软件的基础.zip

    4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 ...

    设计模式——可复用面向对象软件的基础(1)

    结构型模式如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy)则关注于如何将不同组件组合在一起,保持它们之间的协同工作,同时提供了扩展和包装原有功能的能力。 行为型模式如观察者模式...

    设计模式-Java语言中的应用(pdf)

    结构型模式如适配器(Adapter)、装饰器(Decorator)、代理(Proxy)、桥接(Bridge)和组合(Composite),则关注如何将不同组件组合成更复杂的结构,以实现新的功能。行为型模式如策略(Strategy)、观察者...

Global site tag (gtag.js) - Google Analytics