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();
    }
    
  • 相关阅读:
    org.apache.hadoop.hbase.MasterNotRunningException解决策略
    工作小记
    JSP_运维_JSP项目部署到server(适合0经验新手)
    ubuntu 12.04下编译安装nginx-1.9.3
    理解“属性”
    解密SVM系列(二):SVM的理论基础
    AlphaGo论文的译文,用深度神经网络和树搜索征服围棋:Mastering the game of Go with deep neural networks and tree search
    SOAPUI 測试Http 协义
    JavaScript深入系列15篇
    javascript运行机制之执行顺序详解
  • 原文地址:https://www.cnblogs.com/chencarl/p/8649394.html
Copyright © 2011-2022 走看看