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.
![1486191766585466.jpg abstractfactory_pattern_uml_diagram.jpg](https://img.php.cn/upload/image/196/955/815/1486191766585466.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