博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Decorator模式
阅读量:4133 次
发布时间:2019-05-25

本文共 1662 字,大约阅读时间需要 5 分钟。

Decorator模式解决以下情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会定义一个新类继承自定义好的类,这样会带来一个问题。通过继承的方式解决这样的情况还带来了系统的复杂性,因为继承的深度会变得很深。而Decorator模式提供了一种给类增加职责的方法,不是通过继承实现,而是通过组合。

Decorator.h

//Decorator.h#ifndef _DECORATOR_H_#define _DECORATOR_H_class Component{public:	virtual ~Component();	virtual void Operation();protected:	Component();private:};class ConcreteComponent:public Component{public:	ConcreteComponent();	~ConcreteComponent();	void Operation();protected:private:};class Decorator:public Component{public:	Decorator(Component* com);	virtual ~Decorator();	void Operation();protected:	Component* _com;private:};class ConcreteDecorator:public Decorator{public:	ConcreteDecorator(Component* com);	~ConcreteDecorator();	void Operation();	void AddedBehavior();protected:private:};#endif //~_DECORATOR_H_
Decorator.cpp

//Decorator.cpp#include "Decorator.h"#include 
Component::Component(){}Component::~Component(){}void Component::Operation(){}ConcreteComponent::ConcreteComponent(){ }ConcreteComponent::~ConcreteComponent(){}void ConcreteComponent::Operation(){ std::cout<<"ConcreteComponent operation..."<
_com = com;}Decorator::~Decorator(){ delete _com;}void Decorator::Operation(){}ConcreteDecorator::ConcreteDecorator(Component* com):Decorator(com){}ConcreteDecorator::~ConcreteDecorator(){}void ConcreteDecorator::AddedBehavior(){ std::cout<<"ConcreteDecorator::AddedBehacior...."<
Operation(); this->AddedBehavior();}
main.cpp

#include "Decorator.h"#include 
using namespace std;int main(){ Component* com = new ConcreteComponent(); Decorator* dec = new ConcreteDecorator(com); dec->Operation(); delete dec; return 0;}

转载地址:http://jjvvi.baihongyu.com/

你可能感兴趣的文章