informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Pola Pabrik adalah pola desain yang biasa digunakan dalam pemrograman berorientasi objekpola kreasi agak.Pola pabrik terutama digunakan untuk membuat objek, tetapi berbeda dengan menggunakannya secara langsung dalam kode.new
Pembuatan kata kunci berbeda karena membuat objek melalui antarmuka umum, sehingga memisahkan proses pembuatan objek dari penggunaan kode klien. Berikut ini adalah pengenalan rinci tentang pola pabrik:
Pola pabrik terutama dibagi menjadi tiga jenis: pola pabrik sederhana (pola pabrik statis), pola metode pabrik, dan pola pabrik abstrak.
Diagram kelas pola pabrik sederhana
Pola metode pabrik
pola pabrik abstrak
Pola pabrik memiliki berbagai aplikasi dalam pengembangan aktual, seperti koneksi database, kontrol UI, pemrosesan file, logging, komunikasi jaringan, antrian pesan, struktur data, enkripsi dan dekripsi, push pesan, dan penjadwalan tugas. Dalam skenario ini, penggunaan pola pabrik dapat memisahkan proses pembuatan objek dari proses penggunaan, sehingga meningkatkan fleksibilitas dan skalabilitas sistem.
Dalam pola pabrik sederhana, kami mendefinisikan kelas pabrik yang dapat mengembalikan instance dari tipe berbeda berdasarkan parameter yang diteruskan.
Di bawah ini adalah contoh pola pabrik sederhana yang ditulis dalam Java. Kita akan membuat pabrik bentuk yang dapat menghasilkan contoh lingkaran, persegi panjang, dan persegi. Pertama, kita mendefinisikan antarmuka bentuk (Shape) dan beberapa kelas konkret (Lingkaran, Persegi Panjang, Kotak) yang mengimplementasikan antarmuka ini.
- // 形状接口
- interface Shape {
- void draw();
- }
-
- // 圆形类
- class Circle implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Circle::draw() method.");
- }
- }
-
- // 矩形类
- class Rectangle implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Rectangle::draw() method.");
- }
- }
-
- // 正方形类
- class Square implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Square::draw() method.");
- }
- }
Selanjutnya, kita mendefinisikan kelas pabrik (ShapeFactory) yang menggunakan metode statis untuk menghasilkan objek bentuk.
- // 形状工厂类
- class ShapeFactory {
-
- // 使用 getShape 方法获取形状类型的对象
- public static 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;
- }
- }
Terakhir, kita bisa menggunakan kelas pabrik untuk mendapatkan objek bentuk dan memanggilnyadraw
metode.
- public class FactoryPatternDemo {
-
- public static void main(String[] args) {
- // 获取 Circle 的对象,并调用它的 draw 方法
- Shape shape1 = ShapeFactory.getShape("CIRCLE");
- shape1.draw();
-
- // 获取 Rectangle 的对象,并调用它的 draw 方法
- Shape shape2 = ShapeFactory.getShape("RECTANGLE");
- shape2.draw();
-
- // 获取 Square 的对象,并调用它的 draw 方法
- Shape shape3 = ShapeFactory.getShape("SQUARE");
- shape3.draw();
- }
- }
Dalam contoh ini,ShapeFactory
kelas bertanggung jawab untuk membuatShape
Sebuah contoh dari antarmuka.Kode klien melakukan ini dengan meneruskan informasi tipe (misalnya string) keShapeFactory
metode statis kelasgetShape
untuk mendapatkan contoh bentuk yang diinginkan. Dengan cara ini, klien dipisahkan dari implementasi kelas tertentu dan mematuhi prinsip pembukaan dan penutupan, yaitu kelas bentuk baru dapat diperluas tanpa mengubah kode klien. Namun, kelemahan utama dari pola pabrik sederhana adalah jika sistem perlu diperluas dengan rangkaian produk baru (seperti warna selain bentuk, dll.), kelas pabrik perlu dimodifikasi, yang melanggar sebagian dari keterbukaan. -prinsip tertutup. Dalam hal ini, pertimbangkan untuk menggunakan pola Metode Pabrik atau pola Pabrik Abstrak.
Masih mengambil bentuk sebagai contoh, kami menggunakan metode rekayasa untuk membuatnya.
Pertama tentukan antarmuka bentuk (Produk) dan buat tiga kelas implementasi.
- // 形状接口
- interface Shape {
- void draw();
- }
-
- // 圆形类
- class Circle implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Circle::draw() method.");
- }
- }
-
- // 矩形类
- class Rectangle implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Rectangle::draw() method.");
- }
- }
-
- // 正方形类
- class Square implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Square::draw() method.");
- }
- }
Selanjutnya, tentukan antarmuka pencipta (Creator) dan pencipta konkret (Concrete Creator):
- // 创建者接口
- interface ShapeFactory {
- Shape getShape(String shapeType);
- }
-
- // 具体创建者类
- class RectangleFactory implements ShapeFactory {
- @Override
- public Shape getShape(String shapeType) {
- if (shapeType == null) {
- return null;
- }
- if (shapeType.equalsIgnoreCase("RECTANGLE")) {
- return new Rectangle();
- }
- return null;
- }
- }
-
- class CircleFactory implements ShapeFactory {
- @Override
- public Shape getShape(String shapeType) {
- if (shapeType == null) {
- return null;
- }
- if (shapeType.equalsIgnoreCase("CIRCLE")) {
- return new Circle();
- }
- return null;
- }
- }
-
- class SquareFactory implements ShapeFactory {
- @Override
- public Shape getShape(String shapeType) {
- if (shapeType == null) {
- return null;
- }
- if (shapeType.equalsIgnoreCase("SQUARE")) {
- return new Square();
- }
- return null;
- }
- }
Terakhir, gunakan kelas pembuat beton untuk mendapatkan objek bentuk dan memanggilnyadraw
metode:
- public class FactoryMethodPatternDemo {
-
- public static void main(String[] args) {
- ShapeFactory shapeFactory = new CircleFactory();
-
- // 获取 Circle 的对象,并调用它的 draw 方法
- Shape shape1 = shapeFactory.getShape("CIRCLE");
- shape1.draw();
-
- // 使用 RectangleFactory 来获取 Rectangle 的对象
- shapeFactory = new RectangleFactory();
- Shape shape2 = shapeFactory.getShape("RECTANGLE");
- shape2.draw();
-
- // 使用 SquareFactory 来获取 Square 的对象
- shapeFactory = new SquareFactory();
- Shape shape3 = shapeFactory.getShape("SQUARE");
- shape3.draw();
- }
- }
Dalam contoh ini,Kami membuat kelas pabrik yang sesuai untuk setiap kelas bentuk (Meskipun dalam aplikasi nyata, biasanya akan ada struktur kelas pabrik yang lebih umum, mungkin melalui file konfigurasi atau refleksi untuk menghindari penulisan kelas pabrik terpisah untuk setiap kelas produk). Ini membantu mendemonstrasikan prinsip-prinsip dasar pola Metode Pabrik,Artinya, biarkan subkelas pabrik memutuskan kelas mana yang akan dipakai . Namun, untuk kasus sederhana dalam contoh ini, Anda mungkin lebih cenderung menggunakan pola Simple Factory atau mempertimbangkan pola desain lain untuk mengurangi duplikasi kode.
Contoh ini mengambil ponsel sebagai contoh, produk abstrak yang terkait dengan ponsel (seperti layar, baterai, sistem operasi, dll.), dan membuat kelas produk khusus untuk mengimplementasikan antarmuka ini. Kami kemudian dapat mendefinisikan antarmuka pabrik abstrak dan kelas pabrik konkret untuk menghasilkan produk ini. Berikut adalah contoh sederhana yang menunjukkan cara menggunakan pola Pabrik Abstrak untuk memproduksi komponen (layar dan baterai) untuk berbagai merek dan model ponsel:
Pertama, tentukan antarmuka produk dan produk spesifik:
- // 屏幕接口
- interface Screen {
- void display();
- }
-
-
- // 高端屏幕的实现
- class HighEndScreen implements Screen {
- @Override
- public void display() {
- System.out.println("显示高清屏幕");
- }
- }
-
- // 低端屏幕的实现
- class LowEndScreen implements Screen {
- @Override
- public void display() {
- System.out.println("显示普通屏幕");
- }
- }
-
-
- // 电池接口
- interface Battery {
- void charge();
- }
-
-
- // 高效电池的实现
- class HighEfficiencyBattery implements Battery {
- @Override
- public void charge() {
- System.out.println("快速充电");
- }
- }
-
- // 标准电池的实现
- class StandardBattery implements Battery {
- @Override
- public void charge() {
- System.out.println("标准充电");
- }
- }
Selanjutnya, tentukan antarmuka pabrik abstrak dan kelas pabrik beton:
- // 手机组件工厂接口
- interface PhoneFactory {
- Screen createScreen();
- Battery createBattery();
- }
-
- // 高端手机工厂
- class HighEndPhoneFactory implements PhoneFactory {
- @Override
- public Screen createScreen() {
- return new HighEndScreen();
- }
-
- @Override
- public Battery createBattery() {
- return new HighEfficiencyBattery();
- }
- }
-
- // 低端手机工厂
- class LowEndPhoneFactory implements PhoneFactory {
- @Override
- public Screen createScreen() {
- return new LowEndScreen();
- }
-
- @Override
- public Battery createBattery() {
- return new StandardBattery();
- }
- }
Terakhir, kode klien, yang menggunakan pabrik abstrak untuk membuat objek produk konkret:
- public class PhoneFactoryPatternDemo {
- public static void main(String[] args) {
- // 使用高端手机工厂
- PhoneFactory highEndFactory = new HighEndPhoneFactory();
- Screen highEndScreen = highEndFactory.createScreen();
- Battery highEndBattery = highEndFactory.createBattery();
-
- highEndScreen.display();
- highEndBattery.charge();
-
- // 使用低端手机工厂
- PhoneFactory lowEndFactory = new LowEndPhoneFactory();
- Screen lowEndScreen = lowEndFactory.createScreen();
- Battery lowEndBattery = lowEndFactory.createBattery();
-
- lowEndScreen.display();
- lowEndBattery.charge();
- }
- }
Dalam contoh ini, kami mendefinisikan dua pabrik ponsel (kelas atas dan kelas bawah), yang masing-masing mampu memproduksi jenis layar dan baterai tertentu.Kode klien berinteraksi dengan kelas pabrik tertentu melalui antarmuka pabrik abstrak, sehingga mencapai pemisahan dari kelas produk tertentu. . Dengan cara ini, jika kita perlu menambahkan jenis telepon baru di masa mendatang (misalnya, telepon kelas menengah), kita hanya perlu menambahkan kelas produk baru dan kelas pabrik yang sesuai tanpa mengubah kode klien yang ada.
Pola pabrik adalah pola desain yang sangat berguna,Ini merangkum proses pembuatan objek, mengurangi penggandengan, meningkatkan skalabilitas program dan kemudahan pemeliharaan, dll. , telah banyak digunakan dalam pengembangan perangkat lunak.Namun, ia juga memiliki beberapaKerugiannya, seperti tanggung jawab pabrik yang berlebihan, kesulitan dalam perluasan sistem, dll. . Oleh karena itu, dalam penerapan praktis, trade-off dan pilihan perlu dibuat berdasarkan skenario dan kebutuhan spesifik.
Jika pola pabrik (pabrik sederhana, metode pabrik, pabrik abstrak) bermanfaat bagi Anda, ingatlah untuk menyukai dan mengoleksinya.