设计模式之装饰模式
基类
#pragma once class Component { public: virtual ~Component(); virtual void Operation(); protected: Component(); };
#include "Component.h" Component::Component() { } Component::~Component() { } void Component::Operation() { }
应用类
#pragma once #include "Component.h" class ConcreateComponent : public Component { public: ConcreateComponent(); ~ConcreateComponent(); void Operation(); };
#include "ConcreateComponent.h" #include <iostream> ConcreateComponent::ConcreateComponent() { } ConcreateComponent::~ConcreateComponent() { } void ConcreateComponent::Operation() { std::cout << "ConcreateComponent operation..." << std::endl; }
装饰类基类
#pragma once #include "ConcreateComponent.h" //手动改。修改后外部调用时引入的头文件可以减少 class Decorator : public Component { public: Decorator(Component *com); virtual ~Decorator(); void Operation(); protected: Component *m_com; };
#include "Decorator.h" Decorator::Decorator(Component *com) { this->m_com = com; } Decorator::~Decorator() { } void Decorator::Operation() { }
为应用类添加执行操作的派生类
#pragma once #include "Decorator.h" class ConcreateDecorator : public Decorator { public: ConcreateDecorator(Component *com); ~ConcreateDecorator(); void Operation(); void AddedBehavior(); };
#include "ConcreateDecorator.h" #include <iostream> ConcreateDecorator::ConcreateDecorator(Component *com) : Decorator(com) { } ConcreateDecorator::~ConcreateDecorator() { } void ConcreateDecorator::AddedBehavior() { std::cout << "ConcreateDecorator::AddedBehavior..." << std::endl; } void ConcreateDecorator::Operation() { m_com->Operation(); this->AddedBehavior(); }
测试
#include <iostream> //#include "Decorator.h" //可以注释,在当前情况 #include "ConcreateDecorator.h" int main() { Component *com = new ConcreateComponent(); Decorator *dec = new ConcreateDecorator(com); dec->Operation(); delete dec; dec = NULL; delete com; com = NULL; std::cout << "Hello World!\n"; }

浙公网安备 33010602011771号