Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1.What is Abstract Factory patten?
- => 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.
- 2.What are their benefit?
- => *Abstrak Pola desain pabrik menyediakan pendekatan kode untuk antarmuka daripada implementasi.
- *Abstrak Pola pabrik adalah "pabrik pabrik" dan dapat dengan mudah diperluas untuk mengakomodasi lebih banyak produk, misalnya kita
- dapat menambahkan Laptop subkelas lain dan pabrik LaptopPabrik.
- *Abstrak Pola pabrik kuat dan menghindari logika kondisional dari pola pabrik.
- 3.What are their drawback?
- => 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.
- 4.When to use it at best?
- => *Klien tidak tergantung pada bagaimana kita membuat dan menyusun objek dalam sistem
- *Sistem ini terdiri dari beberapa keluarga objek, dan keluarga ini dirancang untuk digunakan bersama
- *Kita membutuhkan nilai run-time untuk membangun ketergantungan tertentu
- 5.When to NOT use it?
- => *objek baru sangat sederhana dan tidak mungkin diklasifikasi
- misalnya Daftar daftar = ArrayList baru ();
- *objek baru tidak menarik untuk diuji
- *tidak memiliki dependensi
- *tidak melakukan pekerjaan yang relevan atau jangka panjang
- mis. Logger log = new SimpleLogger ();
- enum CarType{
- MICRO, MINI, LUXURY
- }
- abstract class Car{
- Car(CarType model, Location location){
- this.model = model;
- this.location = location;
- }
- abstract void construct();
- CarType model = null;
- Location location = null;
- CarType getModel() {
- return model;
- }
- void setModel(CarType model) {
- this.model = model;
- }
- Location getLocation() {
- return location;
- }
- void setLocation(Location location) {
- this.location = location;
- }
- @Override
- public String toString() {
- return "CarModel - "+model + " located in "+location;
- }
- }
- class LuxuryCar extends Car{
- LuxuryCar(Location location){
- super(CarType.LUXURY, location);
- construct();
- }
- @Override
- protected void construct() {
- System.out.println("Connecting to luxury car");
- }
- }
- class MicroCar extends Car{
- MicroCar(Location location){
- super(CarType.MICRO, location);
- construct();
- }
- @Override
- protected void construct() {
- System.out.println("Connecting to micro car");
- }
- }
- class MiniCar extends Car{
- MiniCar(Location location){
- super(CarType.MINI,location);
- construct();
- }
- @Override
- void construct() {
- System.out.println("Connecting to mini car");
- }
- }
- enum Location{
- Default , USA , India
- }
- class IndiaCarFactory{
- static Car buildCar(CarType model) {
- Car car = null;
- switch (model) {
- case MICRO:
- car = new MicroCar(Location.India);
- break;
- case MINI:
- car = new MiniCar(Location.India);
- break;
- case LUXURY:
- car = new LuxuryCar(Location.India);
- break;
- default:
- break;
- }
- return car;
- }
- }
- class DefaultCarFactory{
- public static Car buildCar(CarType model) {
- Car car = null;
- switch (model) {
- case MICRO:
- car = new MicroCar(Location.Default);
- break;
- case MINI:
- car = new MiniCar(Location.Default);
- break;
- case LUXURY:
- car = new LuxuryCar(Location.Default);
- break;
- default:
- break;
- }
- return car;
- }
- }
- class USACarFactory{
- public static Car buildCar(CarType model) {
- Car car = null;
- switch (model) {
- case MICRO:
- car = new MicroCar(Location.USA);
- break;
- case MINI:
- car = new MiniCar(Location.USA);
- break;
- case LUXURY:
- car = new LuxuryCar(Location.USA);
- break;
- default:
- break;
- }
- return car;
- }
- }
- class CarFactory{
- private CarFactory() {
- }
- public static Car buildCar(CarType type) {
- Car car = null;
- // We can add any GPS Function here which
- // read location property somewhere from configuration
- // and use location specific car factory
- // Currently I'm just using INDIA as Location
- Location location = Location.USA;
- switch(location) {
- case USA:
- car = USACarFactory.buildCar(type);
- break;
- case India:
- car = IndiaCarFactory.buildCar(type);
- default:
- car = DefaultCarFactory.buildCar(type);
- }
- return car;
- }
- }
- class AbstractDesign {
- public static void main(String[]args) {
- System.out.println(CarFactory.buildCar(CarType.MICRO));
- System.out.println(CarFactory.buildCar(CarType.MINI));
- System.out.println(CarFactory.buildCar(CarType.LUXURY));
- }
- }
Add Comment
Please, Sign In to add comment