Latest web development tutorials

penghias

Dekorator (dekorator Pola) memungkinkan Anda untuk menambahkan fitur baru ke objek yang ada tanpa mengubah strukturnya. Jenis pola desain milik model struktural, tersedia sebagai kelas wrapper.

Pola ini menciptakan dekoratif, digunakan untuk membungkus metode kelas dan kelas yang asli dalam menjaga integritas tanda tangan di bawah premis menyediakan fungsionalitas tambahan.

Kami menggunakan contoh berikut untuk menunjukkan pola dekorator. Di antara mereka, kita akan membentuk hiasan dalam berbagai warna, tanpa mengubah bentuk kelas.

pengenalan

Maksud: dinamis untuk objek untuk menambahkan beberapa tanggung jawab tambahan.Peningkatan fungsi, pola dekorator dibandingkan subclassing lebih fleksibel.

Terutama untuk mengatasi: Secara umum, kita sering digunakan untuk memperpanjang warisan kelas untuk mencapai, karena pengenalan statis fitur warisan kelas dan fungsi dengan kenaikan diperpanjang, subclass akan membengkak.

Kapan menggunakan: Anda tidak ingin peningkatan kasus banyak kelas ekstensi sub-kategori.

Bagaimana mengatasi: membagi tanggung jawab fungsional tertentu, sementara mewarisi pola dekorator.

Kode kunci: 1, Komponen kelas bertindak sebagai peran abstrak, tidak seharusnya implementasi spesifik.2, dimodifikasi referensi kelas dan pewarisan Komponen kelas, kelas ekstensi tertentu mengganti metode kelas induk.

contoh aplikasi: 1, Raja Monyet 72 perubahan ketika ia menjadi "bait", ia hanya itu monyet, tapi ia memiliki fungsi candi.2, terlepas dari bingkai foto ada dapat digantung di dinding, tetapi biasanya ada bingkai foto, dan frame benar-benar tergantung di dinding. Sebelum tergantung di dinding, lukisan dapat ditutup dengan kaca, dipasang ke rumah bingkai, kemudian lukisan, kaca dan bingkai terbentuk dari sebuah objek.

Keuntungan: dekoratif dan dekorasi dapat dikembangkan secara independen, tidak digabungkan ke masing-masing, pola dekoratif lainnya adalah modus alternatif warisan, pola hias dinamis dapat memperpanjang kelas yang mengimplementasikan fungsi.

Kekurangan: lebih kompleks multilayer dekoratif.

skenario penggunaan: 1, memperluas fungsi kelas.2, peningkatan fungsi dinamis, dinamis dicabut.

Catatan: Anda dapat menggantikan warisan.

realisasi

Kami akan membuat antarmukaBentukdan pelaksanaan antarmukaShapekelas entitas. Kemudian kami membuat realisasi abstrak antarmukaShapeDecoratorBentuk dekoratif dan objekShapesebagai variabel instance-nya.

RedShapeDecoratoradalah untuk mencapai kelas entitasShapeDecorator.

DecoratorPatternDemo,kelas demonstrasi kami menggunakanRedShapeDecoratoruntuk menghias objekShape.

pola dekorator diagram UML

Langkah 1

Buat sebuah antarmuka.

Shape.java

antarmuka publik Shape {
   kekosongan draw ();
}

Langkah 2

Membuat kelas entitas yang mengimplementasikan antarmuka.

Rectangle.java

public class Rectangle mengimplementasikan Shape {

   @ Override
   public void draw () {
      System.out.println ( "Bentuk: Persegi Panjang");
   }
}

Circle.java

public class Lingkaran mengimplementasikan Shape {

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

Langkah 3

Buat mencapai abstrak antarmukaShapedekoratif.

ShapeDecorator.java

public abstract class ShapeDecorator mengimplementasikan Shape {
   Bentuk decoratedShape dilindungi;

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

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

Langkah 4

Buat sebuah entitas dekoratif kelasShapeDecoratordiperpanjang.

RedShapeDecorator.java

public class RedShapeDecorator meluas ShapeDecorator {

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

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

   kekosongan setRedBorder pribadi (Shape decoratedShape) {
      System.out.println ( "Warna Border: Red");
   }
}

Langkah 5

RedShapeDecoratorgunakan untuk menghias objekShape.

DecoratorPatternDemo.java

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

      Bentuk lingkaran = Lingkaran baru ();

      Bentuk redCircle = RedShapeDecorator baru (Lingkaran baru ());

      Bentuk redRectangle = RedShapeDecorator baru (Rectangle baru ());
      System.out.println ( "Lingkaran dengan perbatasan normal");
      circle.draw ();

      System.out.println ( "\ nCircle perbatasan merah");
      redCircle.draw ();

      System.out.println ( "\ nRectangle perbatasan merah");
      redRectangle.draw ();
   }
}

Langkah 6

Verifikasi output.

Lingkaran dengan perbatasan yang normal
Bentuk: Lingkaran

Lingkaran perbatasan merah
Bentuk: Lingkaran
Warna Border: Red

Persegi panjang perbatasan merah
Bentuk: Persegi Panjang
Warna Border: Red