Corak kilang
Corak Kilang ialah salah satu corak reka bentuk yang paling biasa digunakan di Jawa. Corak reka bentuk jenis ini ialah corak ciptaan, yang menyediakan cara optimum untuk mencipta objek.
Dalam corak kilang, kami tidak mendedahkan logik penciptaan kepada klien semasa mencipta objek, dan menunjuk ke objek yang baru dibuat dengan menggunakan antara muka biasa.
Pengenalan
Niat: Tentukan antara muka untuk mencipta objek dan biarkan subkelasnya menentukan kelas kilang yang hendak dibuat seketika hasil.
Terutamanya menyelesaikan: Terutamanya menyelesaikan masalah pemilihan antara muka.
Bila hendak digunakan: Apabila kami secara eksplisit merancang untuk mencipta kejadian berbeza dalam keadaan berbeza.
Cara menyelesaikan: Biar subkelasnya melaksanakan antara muka kilang dan mengembalikan produk abstrak.
Kod kunci: Proses penciptaan dilaksanakan dalam subkelasnya.
Contoh aplikasi: 1 Jika anda memerlukan kereta, anda boleh mengambilnya terus dari kilang tanpa perlu risau tentang cara kereta itu dibuat dan pelaksanaan khusus di dalamnya. 2. Untuk menukar pangkalan data Hibernate, anda hanya perlu menukar dialek dan pemacu.
Kelebihan: 1 Jika pemanggil ingin mencipta objek, dia hanya perlu tahu namanya. 2. Skala yang tinggi Jika anda ingin menambah produk, anda hanya perlu melanjutkan kelas kilang. 3. Lindungi pelaksanaan khusus produk dan pemanggil hanya mengambil berat tentang antara muka produk.
Kelemahan: Setiap kali anda menambah produk, anda perlu menambah kilang pelaksanaan kelas dan objek tertentu, yang menggandakan bilangan kelas dalam sistem dan meningkatkan kerumitan sistem kepada yang tertentu. Kerumitan juga meningkatkan pergantungan pada kelas tertentu sistem. Ini bukan perkara yang baik.
Senario penggunaan: 1. Perakam log: Rekod mungkin dirakam ke cakera keras tempatan, acara sistem, pelayan jauh, dll. Pengguna boleh memilih tempat untuk merakam log. 2. Akses pangkalan data, apabila pengguna tidak mengetahui jenis pangkalan data yang akan digunakan oleh sistem akhir, dan bila pangkalan data mungkin berubah. 3. Mereka bentuk rangka kerja untuk menyambung ke pelayan memerlukan tiga protokol, "POP3", "IMAP", dan "HTTP".
Nota: Sebagai corak penciptaan kelas, corak kaedah kilang boleh digunakan di mana-mana objek kompleks perlu dijana. Satu perkara yang perlu diberi perhatian ialah objek kompleks sesuai untuk menggunakan corak kilang, manakala objek mudah, terutamanya yang boleh dicipta hanya melalui baru, tidak perlu menggunakan corak kilang. Jika anda menggunakan corak kilang, anda perlu memperkenalkan kelas kilang, yang akan meningkatkan kerumitan sistem.
Pelaksanaan
Kami akan mencipta antara muka Shape dan kelas entiti yang melaksanakan antara muka Shape. Langkah seterusnya ialah untuk menentukan kelas kilang ShapeFactory.
FactoryPatternDemo, kelas demo kami menggunakan ShapeFactory untuk mendapatkan objek Shape. Ia akan menghantar maklumat (BULATAN / SEGI SEMPAT / SEGIempat sama) kepada ShapeFactory untuk mendapatkan jenis objek yang diperlukannya.
Langkah 1
Buat antara muka.
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 kilang untuk menjana objek kelas entiti berdasarkan maklumat yang diberikan.
ShapeFactory.java
public class ShapeFactory { //使用 getShape 方法获取形状类型的对象 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; } }
Langkah 4
Gunakan kilang ini untuk mendapatkan objek kelas entiti dengan menghantar maklumat jenis.
FactoryPatternDemo.java
public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); //获取 Circle 的对象,并调用它的 draw 方法 Shape shape1 = shapeFactory.getShape("CIRCLE"); //调用 Circle 的 draw 方法 shape1.draw(); //获取 Rectangle 的对象,并调用它的 draw 方法 Shape shape2 = shapeFactory.getShape("RECTANGLE"); //调用 Rectangle 的 draw 方法 shape2.draw(); //获取 Square 的对象,并调用它的 draw 方法 Shape shape3 = shapeFactory.getShape("SQUARE"); //调用 Square 的 draw 方法 shape3.draw(); } }
Langkah 5
Sahkan output.
Inside Circle::draw() method. Inside Rectangle::draw() method. Inside Square::draw() method.