装饰模式
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怎么办呢,所以就是开始装饰,那为什么不继承呢,要是有的人会穿衣服,但是又带帽子了呢呢,那我这个类是不是又要分了呢,所以,用装饰类一个一个给他加,比较平行)
装饰模式有效的把核心职责和装饰功能区分开来,去除相关类的重复装饰逻辑。