美文网首页
装饰模式

装饰模式

作者: 张霸天 | 来源:发表于2017-03-03 09:52 被阅读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怎么办呢,所以就是开始装饰,那为什么不继承呢,要是有的人会穿衣服,但是又带帽子了呢呢,那我这个类是不是又要分了呢,所以,用装饰类一个一个给他加,比较平行)

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

    相关文章

      网友评论

          本文标题:装饰模式

          本文链接:https://www.haomeiwen.com/subject/ybmkgttx.html