Le motif du décorateur peut ajouter dynamiquement des responsabilités supplémentaires à un objet. En termes d'ajout de fonctions, le mode décorateur est plus flexible que la génération de sous-classes.
L'environnement applicable pour ce mode est:
(1) Ajouter des responsabilités à un seul objet de manière dynamique et transparente sans affecter d'autres objets.
(2) gérer les responsabilités qui peuvent être révoquées.
(3) Lorsque la méthode de génération de sous-classes ne peut pas être utilisée pour l'expansion. Un scénario est qu'il peut y avoir un grand nombre d'extensions indépendantes, ce qui produira un grand nombre de sous-classes pour soutenir chaque combinaison, ce qui fait exploser le nombre de sous-classes. Un autre cas peut être dû au fait que la définition de classe est masquée, ou la définition de classe ne peut pas être utilisée pour générer des sous-classes.
Étapes clés pour implémenter ce mode:
(1) Composant (la classe de base de l'objet décoré): définit l'interface de l'objet, qui peut ajouter dynamiquement des responsabilités à ces objets;
(2) ConcreteComponent (objet décoratif spécifique): définit un objet spécifique et le décorateur peut y ajouter des responsabilités supplémentaires;
(3) Decorator (Decorator Abstract Class): maintient une référence à l'instance du composant et définit une interface cohérente avec le composant ( c'est-à-dire pour hériter ou implémenter la classe de base de l'objet décoré );
(4) ConcreteDecorator: un objet décoratif spécifique, ajoutant des responsabilités spécifiques aux objets décoratifs spécifiques tenus en interne;
Cela peut être un peu difficile à comprendre pour tout le monde, donc nous sommes toujours silencieux:
Après l'hiver, le temps est devenu de plus en plus froid. Après avoir quitté le travail, en tant que gourmandise vétéran, ce serait formidable d'avoir un rendez-vous avec deux ou trois amis pour avoir une fête chaude. En parlant de pot chaude, je dois mentionner le pot chaud Dalong que j'ai mangé à Chengdu, avec toutes sortes de fonds de pot et de plats latéraux, mais mon préféré est le bas de pot d'origine de Dalong Hot Pot, du bœuf épicé, des tripes de dadao, de la saucisse Tianwei, du tuotuo bœuf, des côtes de porc épicées, etc.
En ce qui concerne cela, vous devriez vous sentir un peu à ce sujet. Le fond du pot mentionné ci-dessus est en fait la base de l'objet décoratif . Les ingrédients sont en fait l'objet abstrait décoratif . Le bas en pot spécifique du bas de pot d'origine Dalong Hot Pot est les objets décoratifs spécifiques. Les différents plats latéraux utilisés pour décorer le fond de la casserole sont les objets décoratifs spécifiques . En parlant de cela, tout le monde aurait dû soudainement s'en rendre compte. Commençons la mise en œuvre du code spécifique:
Étape 1: Définissez la classe de base de l'objet décoré (peut être une classe ou une interface abstraite)
Interface publique Guodi {public float Cost (); // Bien sûr, le bas du pot doit être un prix de chaîne publique Nom (); // le nom doit également être disponible} Étape 2: Définissez l'objet décoratif spécifique (c'est-à-dire divers fond en pot, deux sont définis ici)
La classe publique Yuanyang implémente Guodi {@Override public float Cost () {return 48.0f; } @Override public String name () {return "double pot base"; }} classe publique Dalongyan implémente guodi {@Override public float Cost () {return 59.0f; } @Override public String name () {return "dalong hot pot original pot base"; }}Étape 3: Définissez la classe abstraite du décorateur
classe abstraite publique Peicai implémente Guodi {privé Guodi Guodi; Public FoodDecorator (Guodi Guodi) {Super (); this.guodi = guodi; } @Override public float Cost () {return guodi.cost (); } @Override public String name () {return guodi.name (); }}Étape 4: Définissez l'objet décorateur spécifique
La classe publique Malaniurou étend Peicai {public Malaniurou (guodi guodi) {super (guodi); } @Override public float Cost () {return super.cost () + 46f; } @Override public String name () {return super.name () + "+ bœuf épicé"; }} classe publique Maodu étend Peicai {public maodu (guodi guodi) {super (guodi); } @Override public float Cost () {return super.cost () + 30f; } @Override public String name () {return super.name () + "+ Big Knife Tripe"; }}Classe de test:
Test de classe publique {public static void main (String [] args) {guodi guodi = new Dalongyan (); // commander un dalong hot pot de pot d'origine Maluurou y = new Maluurou (guodi); // obtenir un maodu de bœuf épicé ORDERS "+ X.NAME () +", Consume "+ S.Cost ()); }}Résultat de sortie:
1. Un total de Dalong Hotpot Pot Bottom Original Bottom + Spicy Beef + Dadao Tripe a été commandé, et un total de 135 ont été consommés
Ce qui précède est le modèle de décorateur Java qui vous est présenté par l'éditeur (comprendre le principe du code du point de vue de la vie réelle). J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!