zoukankan      html  css  js  c++  java
  • 设计模式之装饰模式(Decorator)

    装饰模式是一种经典的类功能扩展模式,其精髓在装饰类使用继承加聚合的方式获得接口和要实现对象,然后通过自己实现扩展接口

    作用

    装饰模式通过装饰类动态地将责任附加到对象上,若要扩展功能,无需通过继承增加子类就能扩展对象的新功能,提供了比继承更有弹性的替代方案,避免了子类数量膨胀带来的系统臃肿。

    类视图

    代码实现

    class Component
    {
    public:
    	Component(){}
    	virtual ~Component(){}
    
    	virtual void operation() = 0;
    };
    
    
    class ConcreteComponentA : public Component
    {
    public:
    	ConcreteComponentA(){}
    	~ConcreteComponentA(){}
    
    	void operation()
    	{
    		fprintf(stderr, "ConcreteComponentA's operation!
    ");
    	}
    };
    
    class ConcreteComponentB : public Component
    {
    public:
    	ConcreteComponentB(){}
    	~ConcreteComponentB(){}
    
    	void operation()
    	{
    		fprintf(stderr, "ConcreteComponentB's operation!
    ");
    	}
    };
    
    class Decorator : public Component
    {
    public:
    	Decorator() :mComponent(NULL){}
    	virtual ~Decorator(){}
    
    	virtual void operation()
    	{
    		if (mComponent)
    			mComponent->operation();
    	}
    	virtual void setComponent(Component* pComponent)
    	{
    		mComponent = pComponent;
    	}
    
    protected:
    	Component* mComponent;
    };
    
    
    class ConcreteDecoratorE : public Decorator
    {
    public:
    	ConcreteDecoratorE ();
    	virtual ~ConcreteDecoratorE ();
    
    	virtual void addBehavior()
    	{
    		mComponent->operation();
    		fprintf(stderr, "ConcreteDecoratorE's addBehavior!
    ");
    	}
    };
    
    class ConcreteDecoratorF : public Decorator
    {
    public:
    	ConcreteDecoratorF ();
    	virtual ~ConcreteDecoratorF ();
    
    	virtual void addBehavior()
    	{
    		operation();
    		fprintf(stderr, "ConcreteDecoratorF's addBehavior!
    ");
    	}
    };
    
    
    
    int main()
    {
    	ConcreteComponentB *pComponent = new ConcreteComponentB();
    	ConcreteDecoratorF decorator;
    	decorator.setComponent(pComponent);
    	decorator.addBehavior();
    }
    
  • 相关阅读:
    读INI文件的类
    [导入].net,C#,Ftp各种操作,上传,下载,删除文件,创建目录,删除目录,获得文件列表等
    [导入]Sending email with c# using SMTP Servers
    [导入]Writing an ActiveX control with .Net
    C#基础之Dom笔记8
    韩顺平Java笔记内容简纳
    文本文件的检索
    ASP之vbscript笔记1
    数据库原理整理笔记1
    linux课程笔记2(崔老师)
  • 原文地址:https://www.cnblogs.com/chencarl/p/8649394.html
Copyright © 2011-2022 走看看