3.举例
C++代码:
#ifndef DECORATOR_H #define DECORATOR_H #include <iostream> #include <string> using std::string; using std::cout; using std::endl; class CMeal{ private: string m_strName; public: CMeal(){} CMeal(string temp): m_strName(temp){} virtual void GetName(){ cout<<m_strName<<" "; } }; class CNoodle : public CMeal{ public: CNoodle(): CMeal("noodle"){} }; class CDumpling : public CMeal{ public: CDumpling() : CMeal("dumpling"){} }; class CDressing : public CMeal{ private: CMeal* meal; public: CDressing(CMeal* temp){meal = temp;} virtual void GetName(){ meal->GetName(); } }; class CVinegar : public CDressing{ public: CVinegar(CMeal* temp): CDressing(temp){} virtual void GetName(){ CDressing::GetName(); cout<<"with vinegar"<<" "; } }; class COil : public CDressing{ public: COil(CMeal* temp): CDressing(temp){} virtual void GetName(){ CDressing::GetName(); cout<<"with oil"<<" "; } }; #endif #include <iostream> #include "decorator.h" int main(){ CMeal* firstMeal=new CVinegar(new COil(new CNoodle)); firstMeal->GetName(); cout<<endl; CMeal* secondMeal=new CVinegar(new CDumpling); secondMeal->GetName(); cout<<endl; return 0; }
