andari3107

abstract factory pattern

Mar 4th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.88 KB | None | 0 0
  1. 1.What is Abstract Factory patten?
  2. => Pola desain Pabrik Abstrak adalah salah satu dari dua puluh tiga pola desain GoF yang terkenal yang menggambarkan cara memecahkan masalah desain berulang untuk merancang perangkat lunak berorientasi objek yang fleksibel dan dapat digunakan kembali, yaitu objek yang lebih mudah diimplementasikan, diubah , uji, dan gunakan kembali.
  3. 2.What are their benefit?
  4. => *Abstrak Pola desain pabrik menyediakan pendekatan kode untuk antarmuka daripada implementasi.
  5.    *Abstrak Pola pabrik adalah "pabrik pabrik" dan dapat dengan mudah diperluas untuk mengakomodasi lebih banyak produk, misalnya kita
  6.     dapat menambahkan Laptop subkelas lain dan pabrik LaptopPabrik.
  7.    *Abstrak Pola pabrik kuat dan menghindari logika kondisional dari pola pabrik.
  8. 3.What are their drawback?
  9. => Sulit untuk mendukung jenis produk baru: Memperluas pabrik abstrak untuk menghasilkan jenis Produk baru tidaklah mudah. Itu karena antarmuka AbstractFactory memperbaiki set produk yang dapat dibuat. Mendukung jenis-jenis produk baru memerlukan perluasan antarmuka pabrik, yang melibatkan pengubahan kelas AbstractFactory dan semua subkelasnya.
  10. 4.When to use it at best?
  11. => *Klien tidak tergantung pada bagaimana kita membuat dan menyusun objek dalam sistem
  12.    *Sistem ini terdiri dari beberapa keluarga objek, dan keluarga ini dirancang untuk digunakan bersama
  13.    *Kita membutuhkan nilai run-time untuk membangun ketergantungan tertentu
  14. 5.When to NOT use it?
  15. => *objek baru sangat sederhana dan tidak mungkin diklasifikasi
  16.  misalnya Daftar daftar = ArrayList baru ();
  17.    *objek baru tidak menarik untuk diuji
  18.    *tidak memiliki dependensi
  19.    *tidak melakukan pekerjaan yang relevan atau jangka panjang
  20.  mis. Logger log = new SimpleLogger ();
  21.  
  22.  
  23. enum CarType{
  24.     MICRO, MINI, LUXURY
  25. }
  26.  
  27. abstract class Car{
  28.     Car(CarType model, Location location){
  29.         this.model = model;
  30.         this.location = location;
  31.     }
  32.     abstract void construct();
  33.    
  34.     CarType model = null;
  35.     Location location = null;
  36.    
  37.     CarType getModel() {
  38.         return model;
  39.     }
  40.     void setModel(CarType model) {
  41.         this.model = model;
  42.     }
  43.     Location getLocation() {
  44.         return location;
  45.     }
  46.     void setLocation(Location location) {
  47.         this.location = location;
  48.     }
  49.     @Override
  50.     public String toString() {
  51.         return "CarModel - "+model + "  located in "+location;
  52.     }
  53. }
  54.  
  55. class LuxuryCar extends Car{
  56.     LuxuryCar(Location location){
  57.         super(CarType.LUXURY, location);
  58.         construct();
  59.     }
  60.     @Override
  61.     protected void construct() {
  62.         System.out.println("Connecting to luxury car");
  63.     }
  64. }
  65.  
  66. class MicroCar extends Car{
  67.     MicroCar(Location location){
  68.         super(CarType.MICRO, location);
  69.         construct();
  70.     }
  71.     @Override
  72.     protected void construct() {
  73.         System.out.println("Connecting to micro car");
  74.     }
  75. }
  76.  
  77. class MiniCar extends Car{
  78.     MiniCar(Location location){
  79.         super(CarType.MINI,location);
  80.         construct();
  81.     }
  82.     @Override
  83.     void construct() {
  84.         System.out.println("Connecting to mini car");
  85.     }
  86. }
  87.  
  88. enum Location{
  89.     Default , USA , India
  90. }
  91.  
  92. class IndiaCarFactory{
  93.     static Car buildCar(CarType model) {
  94.         Car car = null;
  95.         switch (model) {
  96.         case MICRO:
  97.             car = new MicroCar(Location.India);
  98.             break;
  99.         case MINI:
  100.             car = new MiniCar(Location.India);
  101.             break;
  102.         case LUXURY:
  103.             car = new LuxuryCar(Location.India);
  104.             break;
  105.            
  106.             default:
  107.             break;
  108.         }
  109.         return car;
  110.     }
  111. }
  112.  
  113. class DefaultCarFactory{
  114.     public static Car buildCar(CarType model) {
  115.         Car car = null;
  116.         switch (model) {
  117.         case MICRO:
  118.             car = new MicroCar(Location.Default);
  119.             break;
  120.         case MINI:
  121.             car = new MiniCar(Location.Default);
  122.             break;
  123.         case LUXURY:
  124.             car = new LuxuryCar(Location.Default);
  125.             break;
  126.            
  127.             default:
  128.             break;
  129.         }
  130.         return car;
  131.     }
  132. }
  133.  
  134. class USACarFactory{
  135.     public static Car buildCar(CarType model) {
  136.         Car car = null;
  137.         switch (model) {
  138.         case MICRO:
  139.             car = new MicroCar(Location.USA);
  140.             break;
  141.         case MINI:
  142.             car = new MiniCar(Location.USA);
  143.             break;
  144.         case LUXURY:
  145.             car = new LuxuryCar(Location.USA);
  146.             break;
  147.            
  148.             default:
  149.             break;
  150.         }
  151.         return car;
  152.     }
  153. }
  154.  
  155. class CarFactory{
  156.     private CarFactory() {
  157.        
  158.     }
  159.     public static Car buildCar(CarType type) {
  160.         Car car = null;
  161.          // We can add any GPS Function here which
  162.         // read location property somewhere from configuration
  163.         // and use location specific car factory
  164.         // Currently I'm just using INDIA as Location
  165.         Location location = Location.USA;
  166.        
  167.         switch(location) {
  168.        
  169.         case USA:
  170.             car = USACarFactory.buildCar(type);
  171.             break;
  172.         case India:
  173.             car = IndiaCarFactory.buildCar(type);
  174.         default:
  175.             car = DefaultCarFactory.buildCar(type);
  176.         }
  177.         return car;
  178.     }
  179. }
  180.  
  181. class AbstractDesign {
  182.  
  183.     public static void main(String[]args) {
  184.         System.out.println(CarFactory.buildCar(CarType.MICRO));
  185.         System.out.println(CarFactory.buildCar(CarType.MINI));
  186.         System.out.println(CarFactory.buildCar(CarType.LUXURY));
  187.     }
  188. }
Add Comment
Please, Sign In to add comment