Java: Pola Metode Desain Pabrik | Desain Berorientasi Objek | Pola desain
Diterbitkan: 2013-06-28 Pola Desain Pabrik adalah salah satu pola Desain Kreasi dan banyak digunakan di JDK serta kerangka kerja seperti Spring MVC dan Struts. Pola metode pabrik adalah pola desain kreasi berorientasi objek untuk menerapkan konsep pabrik dan menangani masalah pembuatan objek (produk) tanpa menentukan kelas objek yang tepat yang akan dibuat. Inti dari pola ini adalah untuk “ Mendefinisikan antarmuka untuk membuat objek, tetapi biarkan kelas yang mengimplementasikan antarmuka memutuskan kelas mana yang akan dibuat. Metode Pabrik memungkinkan kelas menunda instantiasi ke subkelas “.
Pertama-tama mari kita pelajari cara mengimplementasikan pola pabrik di java. Kami akan membuat 5 kelas untuk mengimplementasikan pola ini.
- Kelas Super (CrunchfiyCompany.java)
- Kelas super dalam pola pabrik dapat berupa antarmuka, kelas abstrak, atau kelas java normal. Untuk contoh kami, kami memiliki kelas super sebagai kelas abstrak dengan metode
toString()
yang diganti untuk tujuan pengujian.
- Kelas super dalam pola pabrik dapat berupa antarmuka, kelas abstrak, atau kelas java normal. Untuk contoh kami, kami memiliki kelas super sebagai kelas abstrak dengan metode
- Sub Kelas1 (CrunchifyEbay.java)
- Perhatikan bahwa kelas tersebut memperluas kelas CrunchfiyCompany.
- Sub Kelas2 (CrunchifyGoogle.java)
- Perhatikan bahwa kelas tersebut memperluas kelas CrunchfiyCompany.
- Kelas Pabrik (CrunchifyFactoryPattern.java)
- Sekarang setelah kita memiliki kelas super dan sub-kelas yang siap, kita dapat menulis kelas pabrik kita.
- Kita dapat mempertahankan kelas Pabrik Singleton atau kita dapat menyimpan metode yang mengembalikan subkelas statis.
- Perhatikan bahwa berdasarkan parameter input, subclass yang berbeda dibuat dan dikembalikan.
- Kelas Tes (CrunchifyFactoryPatternTest.java)
- Program klien Uji Sederhana yang menggunakan implementasi pola pabrik di atas.
Lainnya harus membaca:
- Thread-Safe dan Implementasi Singleton yang Cepat di Java
- Apa itu Daemon Thread di Jawa? Contoh Terlampir
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ // Super class in factory pattern can be an interface, abstract class or a // normal java class. For our example, we have super class as abstract class // with overridden toString() method for testing purpose. public abstract class CrunchfiyCompany { public abstract String getPhoneNumber ( ) ; public abstract String getZipCode ( ) ; @Override public String toString ( ) { return "Phone #= " + this . getPhoneNumber ( ) + ", Zip Code= " + this . getZipCode ( ) ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ // Notice that the class is extending CrunchfiyCompany class. public class CrunchifyEbay extends CrunchfiyCompany { private String phoneNumber ; private String zipCode ; public CrunchifyEbay ( String phoneNumber , String zipCode ) { this . phoneNumber = phoneNumber ; this . zipCode = zipCode ; } @Override public String getPhoneNumber ( ) { return this . phoneNumber ; } @Override public String getZipCode ( ) { return this . zipCode ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ // Notice that the class is extending CrunchfiyCompany class. public class CrunchifyGoogle extends CrunchfiyCompany { private String phoneNumber ; private String zipCode ; public CrunchifyGoogle ( String phoneNumber , String zipCode ) { this . phoneNumber = phoneNumber ; this . zipCode = zipCode ; } @Override public String getPhoneNumber ( ) { return this . phoneNumber ; } @Override public String getZipCode ( ) { return this . zipCode ; } } |

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com . crunchify . tutorials ; import com . crunchify . tutorials . CrunchfiyCompany ; import com . crunchify . tutorials . CrunchifyEbay ; import com . crunchify . tutorials . CrunchifyGoogle ; /** * @author Crunchify.com */ // Now that we have super classes and sub-classes ready, we can write our factory class. // We can keep Factory class Singleton or we can keep the method that return the subclass a static. // Notice that based on the input parameter, different subclass is created and returned. public class CrunchifyFactoryPattern { public static CrunchfiyCompany getDetails ( String type , String phoneNumber , String zipCode ) { if ( "Ebay" . equalsIgnoreCase ( type ) ) return new CrunchifyEbay ( phoneNumber , zipCode ) ; else if ( "Google" . equalsIgnoreCase ( type ) ) return new CrunchifyGoogle ( phoneNumber , zipCode ) ; return null ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com . crunchify . tutorials ; import com . crunchify . tutorials . CrunchfiyCompany ; import com . crunchify . tutorials . CrunchifyFactoryPattern ; /** * @author Crunchify.com */ // Simple Test client program that uses above factory pattern implementation. public class CrunchifyFactoryPatternTest { public static void main ( String [ ] args ) { CrunchfiyCompany eBay = CrunchifyFactoryPattern . getDetails ( "Ebay" , "408.123.4567" , "98765" ) ; CrunchfiyCompany google = CrunchifyFactoryPattern . getDetails ( "Google" , "519.123.4567" , "56789" ) ; System . out . println ( "Factory eBay Config::" + eBay ) ; System . out . println ( "Factory Google Config::" + google ) ; } } |
1 2 |
Factory eBay Config : : Phone #= 408.123.4567, Zip Code= 98765 Factory Google Config : : Phone #= 519.123.4567, Zip Code= 56789 |
Contoh lain menggunakan Pola Pabrik?
- java.util.Calendar, ResourceBundle dan NumberFormat
getInstance()
metode menggunakan pola Pabrik. -
valueOf()
metode di kelas pembungkus seperti Boolean, Integer dll.
Manfaat Pola Pabrik:
- Ini digunakan ketika kita memiliki kelas super dengan beberapa sub-kelas dan berdasarkan input, kita perlu mengembalikan salah satu sub-kelas. Pola ini mengambil tanggung jawab instantiasi kelas dari program klien ke kelas pabrik.
- Pola pabrik menyediakan pendekatan kode untuk antarmuka daripada implementasi.
- Pola pabrik menghapus instantiasi kelas implementasi aktual dari kode klien, membuatnya lebih kuat, kurang digabungkan, dan mudah diperluas. Misalnya, kita dapat dengan mudah mengubah implementasi kelas PC karena program klien tidak menyadarinya.
- Pola pabrik menyediakan abstraksi antara kelas implementasi dan klien melalui pewarisan.
Kekurangan:
- Pabrik harus digunakan untuk sekelompok objek. Jika kelas tidak memperluas kelas dasar atau antarmuka umum, kelas tersebut tidak dapat digunakan dalam templat desain pabrik.
Daftar semua Java Web Development, tutorial Spring MVC.