Latest web development tutorials

dekorator

Dekorator (Dekorator deseń) pozwala na dodanie nowych funkcji do istniejącego obiektu bez zmiany jego struktury. Ten typ desenie należą modelem strukturalnym, jest on dostępny jako klasa opakowania.

Ten wzór tworzy dekoracyjny, stosowane do zawijania oryginalnych metod klasy i klasy w utrzymaniu integralności podpisu w założeniu zapewniając dodatkową funkcjonalność.

Używamy następujące przykłady pokazują wzorzec dekoratora. Wśród nich, że tworzą dekoracji w różnych kolorach, bez zmieniania kształtu klasy.

wprowadzenie

Zamiar: dynamicznie do obiektu, aby dodać kilka dodatkowych obowiązków.Zwiększona funkcjonalność, Wzorzec Dekorator porównaniu instacji bardziej elastyczne.

Głównie do rozwiązania: W ogóle, często stosowany w celu rozszerzenia dziedziczenie klasy do osiągnięcia, ze względu na wprowadzenie statycznego klasy dziedziczenia cech i rozszerzone funkcjonalności wraz ze wzrostem, podklasa będzie pęcznieć.

Kiedy stosować: nie chcesz wzrost w przypadku wielu klas rozszerzających podkategorii.

Jak rozwiązać: podzielenie określonych zadań funkcjonalnych, natomiast dziedziczenie wzorzec dekoratora.

Klucz kod: 1, komponent działa jak klasy abstrakcyjnej roli, nie powinno konkretna realizacja.2, zmodyfikowany odniesienia klasy i dziedziczenie klasy komponentów, konkretne klasy rozszerzające zastąpić metodę klasy nadrzędnej.

Przykłady zastosowań: 1, Król Małp 72 zmiany, kiedy staje się "świątynią", on po prostu był małpą, ale ma funkcję świątyni.2, bez względu na ramy obrazu nie może być zawieszony na ścianie, ale zwykle nie jest to ramka na zdjęcia, a rama rzeczywiście wisi na ścianie. Przed wiszący na ścianie, obraz może być pokryta szkłem, zamontowany na ramie domu, a następnie malarstwo, szkło, rama wykonana z obiektu.

Zalety: dekoracyjne i ozdoby mogą być rozwijane niezależnie od siebie, nie są połączone ze sobą, dekoracyjny wzór alternatywnego sposobu dziedziczenia, dekoracyjne wzory mogą dynamicznie rozszerzać klasę implementującą funkcję.

Wady: bardziej złożone dekoracyjne wielowarstwową.

Scenariusze użycia: 1, rozciągające funkcję klasy.2, funkcja dynamicznego wzrostu, dynamiczny odwołane.

Uwaga: Można zastąpić dziedziczenie.

realizacja

Będziemy tworzyć interfejskształti implementację interfejsuShapepodmiot klas. Następnie tworzymy realizację streszczenie dekoracyjnych interfejsuShapeDecoratorkształcie oraz obiektkształtjak jego zmiennych instancji.

RedShapeDecoratorjest osiągnięcieShapeDecoratorpodmiotklas.

DecoratorPatternDemo,nasze zajęcia demonstracyjne wykorzystująceRedShapeDecoratorozdobić obiektShape.

Dekorator wzór diagram UML

Etap 1

Tworzenie interfejsu.

Shape.java

public interface Shape {
   void draw ();
}

Etap 2

Tworzenie klasy podmiotu, który implementuje interfejs.

Rectangle.java

public class Rectangle realizuje Shape {

   @Override
   public void draw () {
      System.out.println ( "Kształt: prostokąt");
   }
}

Circle.java

Koło realizuje public class Shape {

   @Override
   public void draw () {
      System.out.println ( "Kształt: Koło");
   }
}

etap 3,

Tworzenie osiągnąć streszczenie dekoracyjnych interfejsShape.

ShapeDecorator.java

public abstract class ShapeDecorator realizuje Shape {
   Kształt decoratedShape chroniony;

   ShapeDecorator publicznych (kształt decoratedShape) {
      this.decoratedShape = decoratedShape;
   }

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

Etap 4

Załóż rozszerzoną jednostki dekoracyjny klasęShapeDecorator.

RedShapeDecorator.java

public class RedShapeDecorator rozciąga ShapeDecorator {

   RedShapeDecorator publicznych (kształt decoratedShape) {
      Super (decoratedShape);		
   }

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

   private void setRedBorder (kształt decoratedShape) {
      System.out.println ( "Border Color: Red");
   }
}

Etap 5

RedShapeDecoratorużyć do ozdobienia obiektShape.

DecoratorPatternDemo.java

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

      Kształt okręgu = nowy krąg ();

      Kształt redCircle = new RedShapeDecorator (nowy krąg ());

      Kształt redRectangle = new RedShapeDecorator (new Rectangle ());
      System.out.println ( "Krąg z normalnej granicy");
      circle.draw ();

      System.out.println ( "\ nCircle czerwonego granicy");
      redCircle.draw ();

      System.out.println ( "\ nRectangle czerwonego granicy");
      redRectangle.draw ();
   }
}

Etap 6

Sprawdź, czy wyjście.

Okrąg o normalnej granicy
Kształt: Koło

Koło czerwonym obramowaniem
Kształt: Koło
Kolor ramki: Czerwony

Prostokąt z czerwonym obramowaniem
Kształt: prostokąt
Kolor ramki: Czerwony