装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
设计原则:对扩展开放,对修改关闭。
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)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象...
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,装饰者模式通过包装(wrapping)一个对象来扩展其功能。 在Head First设计模式这本书中,作者用易懂的方式解释了装饰者模式。书...
Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...
`@cachedproperty`是"Decorator-3.4.0"库中的一个重要装饰器,它被设计来替代`@property`,但增加了缓存功能。当对同一对象的同一属性进行多次访问时,`@cachedproperty`会避免重复计算,提升程序运行效率。这在处理...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
装饰器模式(Decorator Pattern)是一种结构型设计模式,主要用于在运行时动态地给对象添加新的职责或行为,而不必改变现有对象的类定义。在面向对象编程中,装饰器模式提供了一种相对于继承更加灵活的方式来增强或...
装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...
装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为...而在C++中,通过继承和多态,我们可以构建一个灵活的装饰者层次结构。无论在哪个语言中,装饰模式都能有效地提升代码的可维护性和可扩展性。
装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类,该类包装了原始类的实例,并在调用原始类方法之前或之后添加额外的...
装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的原始代码。在C++中实现装饰者模式,可以让我们灵活地扩展对象的功能,同时保持代码的可读性和可维护性...
装饰者模式是软件设计中的一种行为模式,它允许在运行时动态地给对象添加新的行为或职责,而无需改变对象的原始类。这种模式在不违反开闭原则的前提下,提供了扩展对象功能的能力,使得系统更加灵活,易于维护。 在...
对于装饰者模式,书可能会用一个具体的例子,比如咖啡和其配料,来阐述。在这个例子中,咖啡是基础组件,而糖、奶油等就是装饰者。每种配料(装饰者)都包装了一个咖啡对象,并增加了额外的味道或价格。 装饰者模式...
总结来说,`decorator-4.1.2`是一个强大且易于使用的Python库,为开发者提供了创建和管理装饰器的强大工具。通过正确地使用它,我们可以提高代码的可读性和可维护性,同时实现灵活的功能扩展。无论是初学者还是经验...
装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...
- 需要扩展功能时,客户端代码创建一个具体装饰者对象,然后将具体组件对象传递给装饰者。 - 装饰者对象接收组件对象,并通过其持有的组件对象引用调用组件的方法,可以在调用前后增加额外的行为。 - 客户端代码...