Mode Décoration : ajoutez dynamiquement des responsabilités supplémentaires à un objet. En termes d'ajout de fonctionnalités, le mode décoration est plus flexible que la génération de sous-classes.
Quatre rôles du mode décoration :
Classe de composants : Composant
Classe de composants en béton : ConereteComponent
Classe de décoration : Décorateur (étendu à partir de la classe externe Les fonctions de la classe Component, mais il n'est pas nécessaire que Component connaisse l'existence de Decorator.)
Classe de décoration concrète : ConcreteDecorator (fonction pour ajouter des responsabilités à Component)
Ici, les gens prennent l'habillage. modification à titre d'exemple pour implémenter le mode décoration.
Cas de test :
[code]int main(){ //初始化person(人)组件类Component,如果只有一个ConereteComponent类而不需要抽象的Component类,那么可以直接让Decorator继承具体的Component类。 concretePerson *cp = new concretePerson("Jarrett"); //初始化具体服饰类(装饰类Decorate) concreteTshirts *Tshirts = new concreteTshirts; concreteTrouser *Trouser = new concreteTrouser; concreteShoes *Shoe = new concreteShoes; //concreteSuit *Suit = new concreteSuit; concreteHat *Hat = new concreteHat; //依次进行装饰 Tshirts->decorate(cp); Trouser->decorate(Tshirts); Shoe->decorate(Trouser); //Suit->decorate(Shoe); //显示结果 Shoe->show(); std::cout << std::endl; //再装饰一次查看效果 Hat->decorate(Shoe); Hat->show(); return 0; }
Implémentation du mode Décoration :
[code]//主类 class concretePerson{ private: std::string name;//人名 public: concretePerson(){} concretePerson(std::string n):name(n){} //构造方式 virtual void show()const{ std::cout << name << "'s dress: "; } }; //服饰类(装饰类主类) class Finery: public concretePerson{ protected: concretePerson *cPerson;//重点是维护一个主体类对象 public: void decorate(concretePerson *cp){ cPerson = cp; } void show()const{ if(cPerson != NULL) cPerson->show(); } }; //具体服饰类Tshirts class concreteTshirts: public Finery{ public: void show()const{ Finery::show(); //调用基类方法 std::cout << "Tshirts "; //用此来修饰 } }; //具体服饰类Tshirts class concreteTrouser: public Finery{ public: void show()const{ Finery::show(); //调用基类方法 std::cout << "Trouser "; //用此来修饰 } }; //具体服饰类Tshirts class concreteShoes: public Finery{ public: void show()const{ Finery::show(); //调用基类方法 std::cout << "Shoe "; //用此来修饰 } }; //具体服饰类Tshirts class concreteSuit: public Finery{ public: void show()const{ Finery::show(); //调用基类方法 std::cout << "Suit "; //用此来修饰 } }; //具体服饰类Tshirts class concreteHat: public Finery{ public: void show()const{ Finery::show(); //调用基类方法 std::cout << "Hat "; //用此来修饰 } };
De cette façon, la fonction de décoration dans la classe est déplacée et supprimée de la classe principale, ce qui peut simplifier la classe d'origine. Il sépare efficacement les responsabilités principales et les fonctions de décoration de la classe et peut supprimer la logique de décoration répétée dans les classes associées.
Ce qui précède est le contenu de la compréhension simple du mode décoration en C mode conception, plus Pour le contenu associé, veuillez faire attention au site Web PHP chinois (www.php.cn) !