装饰模式

2017-03-03  本文已影响0人  张霸天

#include <stdio.h>
#include <iostream>

using namespace std;

class Person {
    
private:
    string name;
public:
    Person(){};
    Person(string name):name(name){}
    ~Person(){};
    virtual void show(){
        cout<<"装扮的"<<name<<endl;
    }
};

class Finery : public Person {
protected:
    Person * component;
    
public:
    Finery(){};
    void Decorate(Person * componpent_) {
        component = componpent_;
    }
    
    void show() {
        if (component != NULL){
            component->show();
        }
    }
};

class TShirts : public Finery {
    
    
public:
    TShirts(){};
    void show(){
        cout<<"大体恤"<<endl;
        Finery::show();
    }
};

class BigTrouser : public Finery {
    
    
public:
    BigTrouser(){};
    void show(){
        cout<<"垮裤"<<endl;
        Finery::show();
    }
};


void testLesson3() {
    Person * person = new Person("小菜");
    TShirts * tshirt = new TShirts();
    BigTrouser * bigtrouser =  new BigTrouser();
    
    tshirt->Decorate(person);
    bigtrouser->Decorate(tshirt);
    bigtrouser->show();
    
}

重要概念

装饰模式就是为已有的功能动态的添加更多功能的一种方式(真tm说的很明白了,我一开始也不理解,这不是耦合吗,后来一想其实不是,人本来不会穿衣服的,后来在天朝讲文明懂礼貌的宣传下,都开始穿短裤了,那人是不是真的质变了呢,是不是就不存在着不会穿衣服的人呢,这tm怎么办呢,所以就是开始装饰,那为什么不继承呢,要是有的人会穿衣服,但是又带帽子了呢呢,那我这个类是不是又要分了呢,所以,用装饰类一个一个给他加,比较平行)

装饰模式有效的把核心职责和装饰功能区分开来,去除相关类的重复装饰逻辑。

上一篇下一篇

猜你喜欢

热点阅读