Dekorateur

Ausstatter (Decorator-Muster) ermöglicht es Ihnen, neue Funktionen zu einem bestehenden Objekt hinzuzufĂŒgen, ohne ihre Struktur zu verĂ€ndern. Diese Art von Entwurfsmustern gehören Strukturmodell, es ist als Wrapper-Klasse zur VerfĂŒgung.

Dieses Muster schafft eine dekorative, verwendet, um die ursprĂŒngliche Klasse und Klassenmethoden zu wickeln, die IntegritĂ€t der Unterschrift unter der PrĂ€misse der Bereitstellung zusĂ€tzlicher FunktionalitĂ€t aufrechtzuerhalten.

Wir verwenden die folgenden Beispiele, die die Decorator-Muster zu demonstrieren. Unter ihnen werden wir eine Dekoration in verschiedenen Farben bilden, ohne die Form der Klasse zu verÀndern.

EinfĂŒhrung

Absichten: dynamisch auf ein Objekt einige zusĂ€tzliche Aufgaben hinzuzufĂŒgen.Erhöhte FunktionalitĂ€t, verglichen Das Decorator-Muster flexibler Subclassing.

Vor allem zu lösen: In der Regel wir hĂ€ufig eine Klassenvererbung zu erweitern anschwellen zu erreichen, durch die EinfĂŒhrung eines statischen Klassenvererbung Features und erweiterte FunktionalitĂ€t mit der Erhöhung wĂŒrde die Unterklasse.

Wann verwendet: Sie mĂŒssen nicht eine Erhöhung bei vielen Unterkategorie Erweiterungsklassen wollen.

Wie zu lösen: die spezifischen funktionalen Verantwortlichkeiten teilen, wÀhrend das Decorator - Muster vererben.

Key - Code: 1, Component- Klasse fungiert als eine abstrakte Rolle, sollte nicht die konkrete Umsetzung. 2, eine modifizierte Klassenreferenzen und Vererbung Komponentenklasse, außer Kraft setzen spezifische Erweiterungsklassen der ĂŒbergeordneten Klasse-Methode.

Anwendungsbeispiele: 1, der Affenkönig 72 Àndern , wenn er wird "Tempel", er war einfach ein Affe, aber er hat einen Tempel Funktion.2, unabhÀngig von einem Bilderrahmen kann es an die Wand gehÀngt werden, aber in der Regel gibt es einen Bilderrahmen, und der Rahmen wurde tatsÀchlich an der Wand hÀngen. Bevor an der Wand hÀngen, kann die Malerei mit Glas abgedeckt werden, an dem Rahmen Haus angebracht ist, dann Malerei, Glas und Rahmen eines Objektes gebildet.

Vorteile: dekorative und Dekoration können unabhÀngig voneinander entwickelt werden, gekoppelt sind , nicht miteinander, dekoratives Muster ist eine alternative Art der Vererbung, dekorative Muster kann dynamisch eine Klasse erweitern, die die Funktion implementiert.

Nachteile: komplexere mehrschichtige dekorativ.

Einsatzszenarien: 1, erstreckt , um eine Klassenfunktion.2, die dynamische Erhöhung FunktionalitÀt, Dynamik entzogen.

Hinweis: Sie Vererbung ersetzen können.

Realisierung

Wir werden eineFormSchnittstelle und Implementierung der EntitÀtsklassenFormSchnittstelle erstellen. Dann haben wir eine Realisierung von abstrakten dekorativenShapeDecoratorForm - Schnittstelle und dasShape- Objekt als Instanzvariablen erstellen.

RedShapeDecoratorist die EntitÀtsklassenShapeDecoratorzuerreichen.

DecoratorPatternDemo,unsere Demonstration KlassenRedShapeDecoratormitShape- Objekt zu dekorieren.

Dekorierermuster UML-Diagramm

Schritt 1

Erstellen Sie eine Schnittstelle.

Shape.java

public interface Form {
   Leere draw ();
}

Schritt 2

Erstellen von Entity-Klasse, die die Schnittstelle implementiert.

Rectangle.java

public class Rectangle implementiert Form {

   @Override
   public void draw () {
      System.out.println ( "Form: Rechteck");
   }
}

Circle.java

public class Kreis implementiert Form {

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

Schritt 3

Erstellen Sie erreichen dekorative abstrakteForm- Schnittstelle.

ShapeDecorator.java

public abstract class ShapeDecorator implementiert Form {
   geschĂŒtzter Form decoratedShape;

   Öffentlichkeit ShapeDecorator (Form decoratedShape) {
      this.decoratedShape = decoratedShape;
   }

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

Schritt 4

Erstellen Sie eine erweiterte Einheit dekorativeShapeDecoratorKlasse.

RedShapeDecorator.java

public class RedShapeDecorator erstreckt ShapeDecorator {

   Öffentlichkeit RedShapeDecorator (Form decoratedShape) {
      super (decoratedShape);		
   }

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

   private void setRedBorder (Form decoratedShape) {
      System.out.println ( "Randfarbe: Rot");
   }
}

Schritt 5

RedShapeDecoratorverwendenShape- Objekt zu dekorieren.

DecoratorPatternDemo.java

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

      Form-Kreis = new Kreis ();

      Form redCircle = new RedShapeDecorator (neu Kreis ());

      Form redRectangle = new RedShapeDecorator (new Rectangle ());
      System.out.println ( "Circle mit normalen Grenze");
      circle.draw ();

      System.out.println ( "\ nCircle der roten Grenze");
      redCircle.draw ();

      System.out.println ( "\ nRectangle der roten Grenze");
      redRectangle.draw ();
   }
}

Schritt 6

Stellen Sie sicher, ausgegeben.

Kreis mit normalen Grenze
Form: Kreis

Kreis der roten Grenze
Form: Kreis
Randfarbe: Rot

Rechteck von rotem Rand
Form: Rechteck
Randfarbe: Rot