Modèle de conception C brève introduction au modèle de décoration

黄舟
Libérer: 2017-01-18 14:48:42
original
1154 Les gens l'ont consulté

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;
}
Copier après la connexion

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 << "&#39;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 ";  //用此来修饰
  }
};
Copier après la connexion


Résumé :

Mode Décoration C'est un moyen d'ajouter dynamiquement plus de fonctions aux fonctions existantes.

Quand faut-il l'utiliser ?

Si les fonctions ajoutées à un programme existant visent uniquement à répondre aux besoins de comportements spéciaux qui ne seront exécutés que dans certaines circonstances, l'ajout de code à la classe principale augmentera la complexité de la classe principale. A ce stade, le mode décoration est nécessaire pour placer chaque fonction à décorer dans une classe distincte, et laisser cette classe envelopper l'objet qu'elle souhaite décorer.

Parce que, lorsqu'un comportement spécial doit être exécuté, le code client peut utiliser de manière sélective les fonctions de décoration pour envelopper les objets dans l'ordre au moment de l'exécution, selon les besoins.

Le mode décoration signifie que vous pouvez écrire votre propre classe principale et votre classe spécifique comme vous le souhaitez. Lorsque je souhaite ajouter des fonctions spéciales supplémentaires, j'utilise des classes supplémentaires pour ajouter des fonctions. C'est mieux que de générer des sous-classes. flexible, pas besoin de modifier le code de la classe principale d'origine et de la classe concrète.

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) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal