Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1.What is Factory pattern?
- => Pola pabrik adalah salah satu prinsip desain inti untuk membuat objek, yang memungkinkan klien untuk membuat objek perpustakaan (dijelaskan di bawah) sedemikian rupa sehingga tidak memiliki kaitan erat dengan hierarki kelas perpustakaan.
- 2.What are their benefit?
- => *Pola desain pabrik menyediakan pendekatan kode untuk antarmuka daripada implementasi.
- *Pola pabrik menghapus contoh kelas implementasi aktual dari kode klien. Pola pabrik membuat kode kami lebih kuat, kurang
- digabungkan, dan mudah diperluas. Sebagai contoh, kita dapat dengan mudah mengubah implementasi kelas PC karena program klien tidak
- menyadarinya.
- *Pola pabrik menyediakan abstraksi antara implementasi dan kelas klien melalui pewarisan.
- 3.What are their drawback?
- => *Membuat kode lebih sulit dibaca karena semua kode Anda berada di belakang abstraksi yang mungkin menyembunyikan abstraksi.
- *Dapat digolongkan sebagai anti-pola ketika salah digunakan, misalnya beberapa orang menggunakannya untuk memasang seluruh aplikasi
- saat menggunakan wadah IOC, sebagai gantinya menggunakan Dependency Injection.
- 4.When to use it at best?
- => Pola desain pabrik digunakan ketika kita memiliki superclass dengan beberapa sub-kelas dan berdasarkan input, kita perlu mengembalikan salah satu dari sub-kelas.
- 5.When to NOT use it?
- => Jika klien tahu objek itu ada, biasanya tidak apa-apa bagi mereka untuk mengetahui cara membuatnya. Jika memiliki antarmuka maka mungkin memerlukan beberapa pabrik untuk membuat contoh konkret, tetapi untuk TDD hanya akan mengejeknya.
- public abstract class Computer {
- public abstract String getRAM();
- public abstract String getHDD();
- public abstract String getCPU();
- public String toString() {
- return "RAM= "+ this.getRAM()+ ", HDD= "+ this.getHDD()+ ", CPU= "+ this.getCPU();
- }
- }
- class PC extends Computer {
- private String ram;
- private String hdd;
- private String cpu;
- public PC(String ram, String hdd, String cpu){
- this.ram=ram;
- this.hdd=hdd;
- this.cpu=cpu;
- }
- @Override
- public String getRAM() {
- return this.ram;
- }
- @Override
- public String getHDD() {
- return this.hdd;
- }
- @Override
- public String getCPU() {
- return this.cpu;
- }
- }
- class Server extends Computer {
- private String ram;
- private String hdd;
- private String cpu;
- public Server(String ram, String hdd, String cpu){
- this.ram=ram;
- this.hdd=hdd;
- this.cpu=cpu;
- }
- @Override
- public String getRAM() {
- return this.ram;
- }
- @Override
- public String getHDD() {
- return this.hdd;
- }
- @Override
- public String getCPU() {
- return this.cpu;
- }
- }
- class ComputerFactory {
- public static Computer getComputer(String type, String ram, String hdd, String cpu){
- if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu);
- else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu);
- return null;
- }
- }
- public class TestFactory {
- public static void main(String[] args) {
- Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz");
- Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz");
- System.out.println("Factory PC Config::"+pc);
- System.out.println("Factory Server Config::"+server);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment