当前位置: 首页 > 编程笔记 >

C++:装饰器模式

公孙辰龙
2023-04-24

模式定义

动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)

要点解析

通过采用组合而非继承的手法, Decorator模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。避免了使用继承带来的“灵活性差”和“多子类衍生问题”。

Decorator类在接口上表现为is-a Component的继承关系,即Decorator类继承了Component类所具有的接口。但在实现上又表现为has-a Component的组合关系,即Decorator类又使用了另外一个Component类。

Decorator模式的目的并非解决“多子类衍生的多继承”问题,Decorator模式应用的要点在于解决“主体类在多个方向上的扩展功能”——是为“装饰”的含义。

//业务操作
class Stream {
public:
	virtual char Read(int number) = 0;
	virtual void Seek(int position) = 0;
	virtual void Write(char data) = 0;
	virtual ~Stream() {}
};
//主体类
class FileStream : public Stream {
public:
	virtual char Read(int number) {
		//读文件流
	}
	virtual void Seek(int position) {
		//定位文件流
	}
	virtual void Write(char data) {
		//写文件流
	}
};
class NetworkStream :public Stream {
public:
	virtual char Read(int number) {
		//读网络流
	}
	virtual void Seek(int position) {
		//定位网络流
	}
	virtual void Write(char data) {
		//写网络流
	}
};
//扩展操作
class DecoratorStream: public Stream{
protected:
	Stream* stream;
	DecoratorStream(Stream * stm) :stream(stm) {}
};
class CryptoStream : public DecoratorStream {
public:
	CryptoStream(Stream* stm) :DecoratorStream(stm) {
	}
	virtual char Read(int number) {
		//额外的加密操作...
		stream->Read(number);//读文件流
	}
	virtual void Seek(int position) {
		//额外的加密操作...
		stream->Seek(position);//定位文件流
	}
	virtual void Write(char data) {
		//额外的加密操作...
		stream->Write(data);//写文件流
	}
};
void Process() {
	//运行时装配
	FileStream* s1 = new FileStream();
	CryptoStream* s2 = new CryptoStream(s1);
}
 类似资料:
  • 主要内容:介绍,实现,Shape.java,Rectangle.java,Circle.java,ShapeDecorator.java,RedShapeDecorator.java,DecoratorPatternDemo.java装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我

  • 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 介绍 意图:动态地给一个对象添加

  • 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 介绍 意图:动态地给一个对象添加

  • 装饰器是旨在提升重用性能的一种结构性设计模式。同Mixin类似,它可以被看作是应用子类划分的另外一种有价值的可选方案。 典型的装饰器提供了向一个系统中现有的类动态添加行为的能力。其创意是装饰本身并不关心类的基础功能,而只是将它自身拷贝到超类之中。 它们能够被用来在不需要深度改变使用它们的对象的依赖代码的前提下,变更我们希望向其中附加功能的现有系统之中。开发者使用它们的一个通常的理由是,它们的应用程

  • Whenever we want to add extra functionality to an object, we have a number of different options. We can: 任何时候,只要我们想给一个对象添加附加的功能,就有多个不同的选项供我们选择。我们可以选择: Add the functionality directly to the class the o

  • 本文向大家介绍C#装饰器模式(Decorator Pattern)实例教程,包括了C#装饰器模式(Decorator Pattern)实例教程的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式详细讲述了C#装饰器模式的实现方法。分享给大家供大家参考。具体实现方法如下: 现假设有一个公司要做产品套餐,即把不同的产品组合在一起,不同的组合对应不同的价格。最终呈现出来的效果是:把产品组合的所有元素