Latest web development tutorials

décorateur

Décorateur (Décorateur Pattern) vous permet d'ajouter de nouvelles fonctionnalités à un objet existant sans changer sa structure. Ce type de modèles de conception appartiennent modèle structurel, il est disponible en tant que classe wrapper.

Ce modèle crée un décoratif, utilisé pour envelopper les méthodes de classe et de classe d'origine dans le maintien de l'intégrité de la signature en vertu du principe de fournir des fonctionnalités supplémentaires.

Nous utilisons les exemples suivants pour démontrer le motif de décorateur. Parmi eux, nous allons former une décoration en couleurs différentes, sans changer la forme de la classe.

introduction

Intention: dynamiquement à un objet pour ajouter des responsabilités supplémentaires.fonctionnalité accrue, le motif décorateur comparé sous-classement plus souple.

Principalement pour résoudre: En général, nous avons souvent utilisé pour étendre un héritage de classe pour atteindre, en raison de l'introduction d'une statique caractéristiques d'héritage de classe et étendu fonctionnalité avec l'augmentation, la sous - classe serait la houle.

Quand utiliser: vous ne voulez pas une augmentation dans le cas de nombreuses classes d'extension sous-catégorie.

Comment résoudre: diviser les responsabilités fonctionnelles spécifiques, tout en héritant le motif de décorateur.

Code de la clé: 1,les actes de classe decomposantscomme un rôle abstrait, ne devrait pas la mise en œuvre spécifique. 2, une des références de classe modifiés et des composants d'héritage de classe, les classes d'extension spécifiques remplacer la méthode de la classe parent.

Exemples d'application: 1, le Roi Singe 72 changement quand il devient «temple», il était tout simplement un singe, mais il a une fonction de temple.2, indépendamment d'un cadre photo, il peut être accroché sur le mur, mais en général il est un cadre photo, et le cadre a été effectivement accroché au mur. Avant de raccrocher sur le mur, la peinture peut être recouvert de verre, monté sur la maison à ossature, puis la peinture, le verre et le cadre formé d'un objet.

Avantages: décoration et la décoration peuvent être développés indépendamment, ne sont pas couplés les uns aux autres, le motif décoratif est un mode alternatif de l' héritage, des motifs décoratifs peut dynamiquement étendre une classe qui implémente la fonction.

Inconvénients: décoratif multicouche plus complexe.

Scénarios d' utilisation:1, étendant une fonction de classe. 2, la fonctionnalité d'augmentation dynamique, dynamique révoquée.

Remarque: Vous pouvez remplacer l' héritage.

réalisation

Nous allons créer une interfacede formeet de mise en œuvre de l'interfaceShapedes classes d'entités. Ensuite , nous créons une réalisation de l' interface abstraiteShapeDecoratorde forme décorative et l'objetShapecomme ses variables d'instance.

RedShapeDecoratorest de réaliser des classes d'entitésShapeDecorator.

DecoratorPatternDemo,nos classes de démonstration utilisantRedShapeDecoratorpour décorer objetShape.

pattern Décorateur diagramme UML

Etape 1

Créer une interface.

Shape.java

public interface Shape {
   void draw ();
}

Etape 2

Créer classe d'entité qui implémente l'interface.

Rectangle.java

public class Rectangle implémente Shape {

   @Override
   tirage public void () {
      System.out.println ( "Shape: Rectangle");
   }
}

Circle.java

Cercle public class implémente Shape {

   @Override
   tirage public void () {
      System.out.println ( "Shape: Circle");
   }
}

Etape 3

Créer une interface réaliser abstraitede formedécorative.

ShapeDecorator.java

ShapeDecorator public abstract class implémente Shape {
   decoratedShape Forme protégée;

   ShapeDecorator publique (Shape decoratedShape) {
      this.decoratedShape = decoratedShape;
   }

   tirage public void () {
      decoratedShape.draw ();
   }	
}

Etape 4

Créer une entité élargie décoratif classeShapeDecorator.

RedShapeDecorator.java

RedShapeDecorator public class ShapeDecorator {

   RedShapeDecorator publique (Shape decoratedShape) {
      super (decoratedShape);		
   }

   @Override
   tirage public void () {
      decoratedShape.draw ();	       
      setRedBorder (decoratedShape);
   }

   setRedBorder private void (Shape decoratedShape) {
      System.out.println ( "Border Couleur: Rouge");
   }
}

Etape 5

RedShapeDecoratorutiliser pour décorer objetShape.

DecoratorPatternDemo.java

public class DecoratorPatternDemo {
   main (String [] args) {public static void

      Forme cercle = new Circle ();

      Forme redCircle = new RedShapeDecorator (new Circle ());

      Forme redRectangle = new RedShapeDecorator (new Rectangle ());
      System.out.println ( "Cercle avec bordure normale");
      circle.draw ();

      System.out.println ( "\ nCircle de bordure rouge");
      redCircle.draw ();

      System.out.println ( "\ nRectangle de bordure rouge");
      redRectangle.draw ();
   }
}

Etape 6

Vérifiez la sortie.

Cercle avec bordure normale
Forme: Cercle

Cercle de bordure rouge
Forme: Cercle
Bordure Couleur: Rouge

Rectangle de bordure rouge
Forme: Rectangle
Bordure Couleur: Rouge