码迷,mamicode.com
首页 > 其他好文 > 详细

装饰模式

时间:2014-05-06 13:22:28      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.

Component定义一个对象接口,可以给这些对象动态的添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功能,但是对于Component来说,是无需知道Decorator的存在的.至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能.

bubuko.com,布布扣
#pragma once
//ConcreteComponent
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
    Person(){}
    Person(string lhs):name(lhs){}
    ~Person(void);
    virtual void Show()
    {
        cout<<"装扮的:"<<name<<endl;
    }
private:
    string name;

};
bubuko.com,布布扣

 

bubuko.com,布布扣
#pragma once
#include "person.h"
class CFinery :    public Person
{
public:
    void Decorate(Person *components)
    {
        component = components;
    }
    virtual void Show()
    {
        component->Show();
    }
protected:
    Person *component;
};
bubuko.com,布布扣

 

bubuko.com,布布扣
#pragma once
#include "finery.h"
class BigTrouser :
    public CFinery
{
public:
    virtual void Show()
    {
        cout<<"大裤衩"<<endl;
        CFinery::Show();
    }

};
bubuko.com,布布扣

 

bubuko.com,布布扣
#pragma once
#include "finery.h"
class Tshirts :
    public CFinery
{
public:
    Tshirts(void);
    ~Tshirts(void);
    virtual void Show()
    {
        cout<<"大Tshirt"<<endl;
        CFinery::Show();
    }
};
bubuko.com,布布扣

 

总结:装饰模式是为已有的功能动态地添加更多功能的一种方式.这种模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时候根据需要有选择的,有顺序的使用装饰功能包装对象了.

 

装饰模式,布布扣,bubuko.com

装饰模式

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/crazycodehzp/p/3710574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!