`
jguangyou
  • 浏览: 375771 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

装饰模式(Decorator)

 
阅读更多

     装饰模式又名包装模式,是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。举个例子,比如有一个车(Vehicle)对象, 现在提倡环保,车可以烧各种燃料,如电、天然气、柴油、汽油、氢气等,也可以烧几种燃料的组合,如果氢气和柴油,汽油和电等。如果这样使用继承,就会有很多的子类。这时可以使用装饰模式。

    主要角色:

  • 接口或者抽象基类:所有类的统一接口或父类
  • 被装饰对象:被装饰者。
  • 装饰角色:所有装饰类的父类。
  • 具体装饰

  采用继承类图:

  

 


 采用装饰模式类图:

 



 
 

示例代码:

   接口:

package com.dp.decorator;

public interface Vehicle {
	public void run();
}

 

被装饰对象:

package com.dp.decorator;

public class ConcreteVehicle implements Vehicle{

	@Override
	public void run() {
		System.out.print("我的动力系统是:");
	}

}

 

装饰角色:

package com.dp.decorator;

public class Decorator implements Vehicle{
	private Vehicle v;

	public Decorator(Vehicle v) {
		this.v= v;
	}

	@Override
	public void run() {
		v.run();
	}

}

 

具体装角色(汽油):

package com.dp.decorator;

public class GasolineDecorator extends Decorator {

	public GasolineDecorator (Vehicle v) {
		super(v);
	}
	public void power(){
		System.out.print("汽油");
	}
	public void run(){
	             super.run();
                             power();
	}
}

 

具体装角色(柴油):

package com.dp.decorator;

public class DieselDecorator extends Decorator {

	public DieselDecorator (Vehicle v) {
		super(v);
	}
	public void power(){
		System.out.print("柴油");
	}
	public void run(){
	             super.run();
                             power();
	}
}

 

具体装角色(太阳能):

package com.dp.decorator;

public class SolarDecorator extends Decorator {

	public SolarDecorator (Vehicle v) {
		super(v);
	}
	public void power(){
		System.out.print("太阳能");
	}
	public void run(){
	             super.run();
                             power();
	}
}

 客户端的调用:

package com.dp.decorator;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Vehicle v = new ConcreteVehicle();
		Decorator d = new GasolineDecorator(v);
                                d.run();//汽油
                                Decorator d1 = new DieselDecorator (d);
                                d1.run();//汽油和柴油
                     Decorator  d2 = new  SolarDecorator(d1);
                                d2.run();//汽油、柴油和太阳能,超强哈哈哈.. 
		
	}

}

 装饰器模式的适用场合:

  1. 需要给一个类扩展功能,或给一个类增加附加责任
  2. 需要动态的给一个类增加功能,还可以动态的撤消
  3. 需要增加有一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。

装饰器模式在java io种得到了充分的运用,例如java.io.FilterInputStream采用的就是一个装饰器模式,这个类本身是一个装饰器的抽象类(父类), 他有许多的子类,是具体的装饰器。类图:


事情就是这么个事情,情况就是这么个情况,不对之处,多多指教.......
 

  • 大小: 26.4 KB
  • 大小: 33.6 KB
  • 大小: 45.4 KB
分享到:
评论

相关推荐

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

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

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

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

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

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

    设计模式C++学习之装饰模式(Decorator)

    装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...

    装饰者模式——Decorator

    装饰者模式(Decorator)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象...

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

    装饰模式(Decorator)是软件设计模式中的一种结构型模式,其主要目的是在不改变对象原有类的基础上,通过添加新的行为或职责来扩展对象的功能。这种模式使得代码的扩展性非常优秀,避免了由于频繁地使用继承而导致...

    java Decorator装饰模式例子

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

    装饰器模式[Decorator]

    装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...

    PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

    装饰器模式(Decorator Pattern)是一种结构型设计模式,主要用于在运行时动态地给对象添加新的职责或行为,而不必改变现有对象的类定义。在面向对象编程中,装饰器模式提供了一种相对于继承更加灵活的方式来增强或...

    通过C#实现设计模式-装饰模式(DecoratorPattern).rar

    装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类,该类包装了原始类的实例,并在调用原始类方法之前或之后添加额外的...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...

    装饰器(Decorator)模式

    装饰器(Decorator)模式 装饰器(Decorator)模式是一种典型的结构型模式,主要用意是动态地为对象添加一些额外的功能。它提供了一个灵活的替代方案来继承子类,以扩展对象的功能。 在《Element of Reusable ...

    装饰模式代码示例

    装饰模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在不违背开闭原则(对扩展开放,对修改关闭)的前提下,提供了灵活的扩展机制。装饰模式通常用于为已有对象添加...

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

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...

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

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

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

    【Decorator模式】是一种设计模式,它允许在运行时动态地给对象...在实际的软件开发中,Decorator模式同样适用于那些需要动态增减功能的对象,例如在UI设计中添加装饰元素,或者在数据库连接池中添加不同的连接策略等。

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

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

    Decorator装饰者模式

    在装饰者模式中,我们通常有两个主要的角色:Component(组件)和Decorator(装饰器)。Component是被装饰的对象接口,定义了所有装饰器和原始对象共同拥有的行为。Concrete Component是Component的具体实现,是实际...

Global site tag (gtag.js) - Google Analytics