corak kilang abstrak


Corak Kilang Abstrak adalah untuk mencipta kilang lain di sekitar kilang super. Gigafactory juga dikenali sebagai kilang kilang lain. Corak reka bentuk jenis ini ialah corak ciptaan, yang menyediakan cara optimum untuk mencipta objek.


Dalam corak kilang abstrak, antara muka ialah kilang yang bertanggungjawab untuk mencipta objek berkaitan tanpa menyatakan kelasnya secara jelas. Setiap kilang yang dihasilkan boleh menyediakan objek mengikut corak kilang.

Pengenalan

Niat: Menyediakan antara muka untuk mencipta satu siri objek yang berkaitan atau saling bergantung tanpa menyatakan kelas konkritnya.

Terutamanya menyelesaikan: Terutamanya menyelesaikan masalah pemilihan antara muka.

Bila hendak digunakan: Produk sistem mempunyai lebih daripada satu keluarga produk, dan sistem hanya menggunakan produk daripada salah satu keluarga.

Cara menyelesaikan: Tentukan berbilang produk dalam keluarga produk.

Kod utama: Penggabungan berbilang produk serupa di kilang.

Contoh permohonan: Selepas bekerja, untuk menghadiri beberapa parti, anda mesti mempunyai dua atau lebih set pakaian, seperti pakaian perniagaan (set lengkap, satu siri produk tertentu), pakaian fesyen ( Set lengkap, satu siri produk tertentu), walaupun untuk keluarga, mungkin terdapat pakaian wanita perniagaan, pakaian lelaki perniagaan, pakaian wanita bergaya, pakaian lelaki bergaya, ini juga set lengkap, iaitu satu siri khusus produk. Anggapkan situasi (yang tidak wujud dalam realiti, jika tidak, tidak ada cara untuk memasuki komunisme, tetapi adalah berguna untuk menggambarkan model kilang abstrak Di rumah anda, almari pakaian tertentu (kilang konkrit) hanya boleh menyimpan jenis tertentu). Pakaian sedemikian (set, satu siri produk tertentu), setiap kali anda mengambil set pakaian ini, anda secara semula jadi akan mengeluarkannya dari almari pakaian ini. Gunakan pemikiran OO untuk memahami bahawa semua almari pakaian (kilang konkrit) adalah almari pakaian (kilang abstrak), dan setiap set pakaian termasuk gasing tertentu (produk tertentu), seluar (produk tertentu) produk), gasing konkrit ini sebenarnya gasing (sebuah produk abstrak), dan seluar konkrit juga seluar (satu lagi produk abstrak).

Kelebihan: Apabila berbilang objek dalam keluarga produk direka bentuk untuk berfungsi bersama, ia boleh memastikan pelanggan sentiasa menggunakan objek dalam keluarga produk yang sama.

Kelemahan: Pengembangan keluarga produk adalah sangat sukar Untuk menambah produk tertentu bagi sesuatu siri, anda perlu menambahkan kod pada Pencipta abstrak dan juga pada produk tertentu.

Senario penggunaan: 1. Perubahan kulit QQ, keseluruhan set ditukar bersama. 2. Hasilkan program untuk sistem pengendalian yang berbeza.

Nota: Keluarga produk sukar dikembangkan, tetapi tahap produk mudah dikembangkan.

Melaksanakan

Kami akan mencipta antara muka Bentuk dan Warna dan kelas entiti yang melaksanakan antara muka ini. Langkah seterusnya ialah mencipta kelas kilang abstrak AbstractFactory. Kemudian tentukan kelas kilang ShapeFactory dan ColorFactory, yang kedua-duanya memanjangkan AbstractFactory. Kemudian buat kelas pencipta/penjana kilang FactoryProducer.

AbstractFactoryPatternDemo, kelas demo kami menggunakan FactoryProducer untuk mendapatkan objek AbstractFactory. Ia akan menghantar maklumat bentuk Bentuk (BULATAN / SEGI SEMPAT / SEGI SEGI) ke AbstractFactory untuk mendapatkan jenis objek yang diperlukan. Ia juga menghantar maklumat warna Warna (MERAH / HIJAU / BIRU) ke AbstractFactory untuk mendapatkan jenis objek yang diperlukan.

abstractfactory_pattern_uml_diagram.jpg

Langkah 1

Buat antara muka untuk bentuk.

Shape.java

public interface Shape {
   void draw();
}

Langkah 2

Buat kelas entiti yang melaksanakan antara muka.

Rectangle.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Circle.java

public class Circle implements Shape {

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

Langkah 3

Buat antara muka untuk warna.

Color.java

public interface Color {
   void fill();
}

Langkah 4

Buat kelas entiti yang melaksanakan antara muka.

Red.java

public class Red implements Color {

   @Override
   public void fill() {
      System.out.println("Inside Red::fill() method.");
   }
}

Green.java

public class Green implements Color {

   @Override
   public void fill() {
      System.out.println("Inside Green::fill() method.");
   }
}

Blue.java

public class Blue implements Color {

   @Override
   public void fill() {
      System.out.println("Inside Blue::fill() method.");
   }
}

Langkah 5

Buat kelas abstrak untuk objek Warna dan Bentuk untuk mendapatkan kilang.

AbstractFactory.java

public abstract class AbstractFactory {
   abstract Color getColor(String color);
   abstract Shape getShape(String shape) ;
}

Langkah 6

Buat kelas kilang yang memanjangkan AbstractFactory untuk menjana objek kelas entiti berdasarkan maklumat yang diberikan.

ShapeFactory.java

public class ShapeFactory extends AbstractFactory {
	
   @Override
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }		
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      return null;
   }
   
   @Override
   Color getColor(String color) {
      return null;
   }
}

ColorFactory.java

public class ColorFactory extends AbstractFactory {
	
   @Override
   public Shape getShape(String shapeType){
      return null;
   }
   
   @Override
   Color getColor(String color) {
      if(color == null){
         return null;
      }		
      if(color.equalsIgnoreCase("RED")){
         return new Red();
      } else if(color.equalsIgnoreCase("GREEN")){
         return new Green();
      } else if(color.equalsIgnoreCase("BLUE")){
         return new Blue();
      }
      return null;
   }
}

Langkah 7

Buat Kilang Kelas penjana/penjana yang mendapat kilang dengan menghantar maklumat bentuk atau warna.

FactoryProducer.java

public class FactoryProducer {
   public static AbstractFactory getFactory(String choice){
      if(choice.equalsIgnoreCase("SHAPE")){
         return new ShapeFactory();
      } else if(choice.equalsIgnoreCase("COLOR")){
         return new ColorFactory();
      }
      return null;
   }
}

Langkah 8

Gunakan FactoryProducer untuk mendapatkan AbstractFactory dan dapatkan objek kelas entiti dengan menghantar maklumat jenis.

AbstractFactoryPatternDemo.java

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

      //获取形状工厂
      AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

      //获取形状为 Circle 的对象
      Shape shape1 = shapeFactory.getShape("CIRCLE");

      //调用 Circle 的 draw 方法
      shape1.draw();

      //获取形状为 Rectangle 的对象
      Shape shape2 = shapeFactory.getShape("RECTANGLE");

      //调用 Rectangle 的 draw 方法
      shape2.draw();
      
      //获取形状为 Square 的对象
      Shape shape3 = shapeFactory.getShape("SQUARE");

      //调用 Square 的 draw 方法
      shape3.draw();

      //获取颜色工厂
      AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");

      //获取颜色为 Red 的对象
      Color color1 = colorFactory.getColor("RED");

      //调用 Red 的 fill 方法
      color1.fill();

      //获取颜色为 Green 的对象
      Color color2 = colorFactory.getColor("Green");

      //调用 Green 的 fill 方法
      color2.fill();

      //获取颜色为 Blue 的对象
      Color color3 = colorFactory.getColor("BLUE");

      //调用 Blue 的 fill 方法
      color3.fill();
   }
}

Langkah 9

Sahkan output.

rreeee