Latest web development tutorials

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