`
prowl
  • 浏览: 80894 次
  • 性别: Icon_minigender_1
  • 来自: 艾泽拉斯
社区版块
存档分类
最新评论

装饰者模式(decorator)--给爱用继承的人一个全新的设计眼界

阅读更多


装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

设计原则:对扩展开放,对修改关闭。


jdk中io采用了这种设计模式,来看一下io的类图先。



FilterInputStream作为一个抽象的装饰者,他的子类可将被装饰者进行包装。

现在我们需要将输入的内容全部转换为大写,来设计扩展这样一个装饰者。


/**
 * @author edison
 * @date 2009-9-25
 */
public class UpperCaseFileInputStream extends FilterInputStream{
	
	FileInputStream fis=null;
	
	protected UpperCaseFileInputStream(InputStream in) {
		super(in);
		fis=(FileInputStream)in;
	}
	
	public UpperCaseFileInputStream(File f) throws FileNotFoundException{
		this(new FileInputStream(f));
	}
	
	public int readForUpperCase(byte[] b){
		int tmp = 0;
		try {
			fis.read(b);
			/**
			 * FilterInputStream里实现了这样一个read方法,
			 * 所以我们也可以直接用父类的read方法。
			 * 这里用fis.read()是为了更好的展示装饰者模式。
			 */
			//read(b);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		for(int i=0;i<b.length;i++){
			b[i]=(byte)Character.toUpperCase((char)b[i]);
		}
		
		return tmp;
	}
}


测试类如下:


/**
 * @author edison
 * @date 2009-9-25
 */
public class TestMyInputStream {
	
	public static void main(String[] args) throws IOException{
		
		File file=new File("C:\\Users\\yang\\Desktop\\abc");
		UpperCaseFileInputStream ucfis=new UpperCaseFileInputStream(file);

		byte[] b=new byte[(int)file.length()];
		int tmp=ucfis.readForUpperCase(b);
		String str=new String(b);
		
		System.out.print("the file's content is: "+str);
		
		ucfis.close();
	}
}


UpperCaseFileInputStream对FileInputStream进行了有效的扩展,遵循了修改关闭,扩展开放的设计原则。

当然,在这里FilterInputStream作为一个抽象的装饰者也实现了一些被装饰者的方法,在这里为了更加清晰的展示装饰者模式并没有直接使用父类方法。


  • 大小: 124.9 KB
分享到:
评论

相关推荐

    装饰者模式——Decorator

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

    设计模式--装饰者模式java例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...

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

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

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

    这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,装饰者模式通过包装(wrapping)一个对象来扩展其功能。 在Head First设计模式这本书中,作者用易懂的方式解释了装饰者模式。书...

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

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

    Decorator-3.4.0

    `@cachedproperty`是"Decorator-3.4.0"库中的一个重要装饰器,它被设计来替代`@property`,但增加了缓存功能。当对同一对象的同一属性进行多次访问时,`@cachedproperty`会避免重复计算,提升程序运行效率。这在处理...

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

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

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

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

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

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

    设计模式专题之(七)装饰模式---设计模式装饰模式示例代码(python--c++)

    装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为...而在C++中,通过继承和多态,我们可以构建一个灵活的装饰者层次结构。无论在哪个语言中,装饰模式都能有效地提升代码的可维护性和可扩展性。

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

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

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

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

    Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的原始代码。在C++中实现装饰者模式,可以让我们灵活地扩展对象的功能,同时保持代码的可读性和可维护性...

    设计模式之装饰者(Decorator)

    装饰者模式是软件设计中的一种行为模式,它允许在运行时动态地给对象添加新的行为或职责,而无需改变对象的原始类。这种模式在不违反开闭原则的前提下,提供了扩展对象功能的能力,使得系统更加灵活,易于维护。 在...

    设计模式-装饰者模式

    对于装饰者模式,书可能会用一个具体的例子,比如咖啡和其配料,来阐述。在这个例子中,咖啡是基础组件,而糖、奶油等就是装饰者。每种配料(装饰者)都包装了一个咖啡对象,并增加了额外的味道或价格。 装饰者模式...

    decorator-4.1.2.rar ,亲测可用

    总结来说,`decorator-4.1.2`是一个强大且易于使用的Python库,为开发者提供了创建和管理装饰器的强大工具。通过正确地使用它,我们可以提高代码的可读性和可维护性,同时实现灵活的功能扩展。无论是初学者还是经验...

    装饰者模式(Decorator Pattern)原理图

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...

    设计模式 - 装饰者模式.rar

    - 需要扩展功能时,客户端代码创建一个具体装饰者对象,然后将具体组件对象传递给装饰者。 - 装饰者对象接收组件对象,并通过其持有的组件对象引用调用组件的方法,可以在调用前后增加额外的行为。 - 客户端代码...

Global site tag (gtag.js) - Google Analytics