decorator装饰器模式,动态地扩展一个对象的功能,而不需要改变原始的类代码或使用继承。是通过创建一个跟目的类同一等级(继承目的类的父类)的称为装饰器的封装对象来实现的。要新添加的功能类继承这个装饰器,这样用户类可以像使用原来的类那样使用新添加的功能类。
decorator装饰器模式可以动态地添加功能,也可以动态地撤销功能。如果一个父类的n个子类,都需要有一个或若干个功能,而它们操作该功能的代码结构基本一致,这个时候就可以考虑使用decorator装饰器模式。如使用继承来实现的话,父类的n个子类的都要派生出子类并实现这些功能,随着子类的增加,重复的代码量会不断增加,灵活性较差。并且利用decorator装饰器模式易于添加任何功能的组合,同一个功能甚至可以添加两次,而继承难以做到这一点。
java中对流的操作,需要叠合多个对象,其实就是应用了装饰器模式。
例如,需要对不同类型的信息进行不同的储存方式,而不同信息的来源不同,这时可以考虑decorator装饰器模式。
public interface Info{
public void read(String path);
public void save();
}
public class FileInfo implements Info{
protect String str;
public void read(String path){/*...*/}
public void save(){/*...*/}
}
public class NetInfo implements Info{
protect String str;
public void read(String path){/*...*/}
public void save(){/*...*/}
}
public class Decorator impletments Info{
Info info;
protect String str;
public Decorator(Info info){this.info=info;}
public void read(String path){info.read(path);}
public void save(){info.save();}
}
public class HtmlDocument extends Decorator{
public HtmlDocument(Info info){super(info);}
public void save(){html();info.save();}
public void html(){/*对str进行处理...*/}
}
public class EncrypDocument extends Decorator{
public EncrypDocument(Info info){super(info);}
public void save(){encryp();info.save();}
public void encryp(){/*对str进行处理...*/}
}
public class Main{
public static void main(String args[]){
Info info = new NetInfo();
Decorator d = new XmlDocument(info);
d.read();
d.save();
}
}
分享到:
相关推荐
“就增加功能来说,Decorator 模式相比生成子类更为灵活” 这句话的含义是,组合比继承更灵活,当可拓展的功能很多时,继承方案会产生大量的子类,而组合可以提
在《Element of Reusable Object-Oriented Software》中,GOF 对装饰器模式的用意进行了概述:Decorator Pattern――Attaches additional responsibilities to an object dynamically. Decorators provide a ...
Python中的装饰器模式是一种设计模式,它允许在不修改原有对象的情况下向其添加新的功能。装饰器模式在Python中有着广泛的应用,特别是在处理诸如认证、权限检查、日志记录、参数检查、同步加锁等与核心业务逻辑无关...
装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...
4. 具体装饰器(Concrete Decorator):实现了装饰器的抽象方法,并添加新的行为或职责。 在"C#面向对象设计模式纵横谈(10):(结构型模式) Decorator 装饰模式.pdf"中,你可能会学习到如何定义这些角色以及它们之间...
在装饰者模式中,我们通常有两个主要的角色:Component(组件)和Decorator(装饰器)。Component是被装饰的对象接口,定义了所有装饰器和原始对象共同拥有的行为。Concrete Component是Component的具体实现,是实际...
`Decorator`是装饰器,持有`DecoratorComponent`的引用,并实现了相同的操作方法。`AdditionalFeatureA`和`AdditionalFeatureB`是具体装饰器,分别添加了功能A和功能B。 通过以下代码,我们可以创建一个装饰器链并...
23种Python设计模式示例演示源码包,比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享...
装饰器模式(Decorator Pattern)是一种结构型设计模式,主要用于在运行时动态地给对象添加新的职责或行为,而不必改变现有对象的类定义。在面向对象编程中,装饰器模式提供了一种相对于继承更加灵活的方式来增强或...
4. **具体装饰器(Concrete Decorator)**:实现了装饰器接口,为组件增加新的行为或属性。每个具体装饰器都对应一种特定的扩展功能。 装饰模式的优点在于其灵活性,它可以独立于原始对象进行扩展,不需要修改原有...
装饰器模式是一种结构型设计模式,它允许在不修改对象本身的情况下动态地为对象添加新的行为或职责。这种模式在软件工程中广泛应用,特别是在需要扩展已有功能而不影响原有代码结构时。在iOS开发中,装饰器模式同样...
装饰器模式是面向对象设计模式的一种,主要用于在不改变原有对象结构的情况下,动态地为对象增加新的功能。这种模式在Java中尤其常见,因为它允许我们遵循“开闭原则”——对扩展开放,对修改关闭。 装饰器模式的...
c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
装饰器模式是一种设计模式,它的核心思想是动态地给一个对象添加一些额外的职责。这种方式提供了一种扩展原有对象功能的方式,而且并不需要修改原有对象的代码,符合开闭原则(对扩展开放,对修改封闭)。 在装饰器...
4. 具体装饰(Concrete Decorator):装饰器的实现,添加了具体组件的特定增强功能。每个具体装饰类可以添加不同的行为,从而提供多种装饰方式。 举个例子,假设我们有一个`Coffee`类,表示基础的咖啡。`Coffee`...
以上就是"Python装饰器模式学习demo"中涉及的主要内容。通过这个项目,你可以深入理解装饰器的工作原理,以及如何在实际项目中应用它们。实践中,装饰器可用于日志记录、性能测试、权限控制等多种场景,是Python开发...
具体装饰器(Concrete Decorator):扩展装饰器的功能,提供额外的行为 总结 装饰模式通过在运行时动态地为对象添加功能,增强了系统的灵活性和可扩展性。它允许在不修改现有代码的情况下添加新的行为,非常适合于...