装饰模式 订阅
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 展开全文
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
信息
外文名
Decorator Pattern
类    别
设计模式
又    名
装饰者模式
中文名
装饰模式
设计原则
多用组合,少用继承
装饰模式定义
23种设计模式之一,英文叫Decorator Pattern,又叫装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
收起全文
精华内容
下载资源
问答
  • 装饰模式

    万次阅读 2019-03-02 13:43:33
    今天来学习一下装饰模式,先看C++代码实现。 #include <iostream> #include <string> #include <math.h> #include <stdlib.h> using namespace std; ...

    ❤️强烈推荐人工智能学习网站❤️           

    今天来学习一下装饰模式,先看C++代码实现。

    #include <iostream> 
    #include <string> 
    #include <math.h> 
    #include <stdlib.h>
    using namespace std;
    
    
    //装饰模式
    class Person   
    {
    public:
    	Person() {}
    	Person(string name) 
    	{
    		this->name = name;		
    	}
    
    	virtual void Show()
    	{
    		cout << name << endl;
    	}
    
    private:
    	string name;
    };
    
    class Finery : public Person  //服饰类
    {
    protected:
    	Person *component;
    public:
    	Finery()
    	{
    		component = NULL;
    	}
    
    	void Decorate(Person *component)
    	{
    		this->component = component;
    	}
    
    	void Show()
    	{
    		if(component != NULL)
    		{
    			component->Show();
    		}
    	}
    };
    
    class Sneakers : public Finery
    {
    public:
    	void Show()
    	{
    		cout << "Sneakers" << endl;
    		Finery::Show();
    	}
    };
    
    class BigTrouser : public Finery
    {
    public:
    	void Show()
    	{
    		cout << "BigTrouser" << endl;
    		Finery::Show();
    	}
    };
    
    class TShirst : public Finery
    {
    public:
    	void Show()
    	{
    		cout << "TShirst" << endl;
    		Finery::Show();
    	}
    };
    
    
    int main()
    {
    	Person *xc = new Person("xiaocai");
    
    	Sneakers *pqx = new Sneakers();
    	BigTrouser *kk = new BigTrouser();
    	TShirst *dtx = new TShirst();
    
    	pqx->Decorate(xc);
    	kk->Decorate(pqx);
    	dtx->Decorate(kk);
    
    	dtx->Show();
            delete xc;
            delete pqx;
            delete kk;
            delete dtx;
    
    	return 0;
    }

    上面代码思想是:"小菜"可以选择任意衣服进行装扮。Sneakers,BigTrouser,TShirst对象里面分别又可以显示自己功能 (上述代码没有实现),这样每个装饰类对象的实现就和如何使用这个对象分离开了。在main函数中,装饰过程是通过main函数代码和父类Finery的函数实现的,这样每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链中。装饰模式是为已有功能动态地添加更多功能的一种方式。

    装饰模式优点:当类需要新增功能时,会向旧类中添加新的代码,这些代码会改变原有类核心职责或主要行为(而且有时候这些功能只是在特定的环境下才需要)。而装饰模式能规避这些,它把要装饰的功能单独放在一个类中,当要增加新的功能时,客户端直接装饰进去就可以,不需要修改旧类代码。

     

     

     

    参考资料:大话设模式

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,957
精华内容 11,982
关键字:

装饰模式