Jurusan Teknik Informatika Fakultas Teknik Univ. Muhammadiyah Malang The Factory Pattern 1
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
1
The Factory Pattern
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
2
Tujuan Pembelajaran• Mengetahui model persoalan yang
menggunakan Simple Factory & Factory Method pattern
• Mengetahui bagaimana menerapkan Simple Factory & Factory Method pattern pada program
• Mampu menerapkan Simple Factory & Factory Method pattern untuk meningkatkan fleksibilitas kode
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
3
Koleksi Desain Pattern• Creational Patterns :– Singleton– Factory
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
4
Persoalan
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
5
Example
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
6
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
7
• Program to an interface not an implementation
• You should be open for extension, yet closed for modification
• Identify the aspects that vary and separate them from what stays the same
8
SIMPLE FACTORY
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
9
public class PizzaStore { public Pizza orderPizza(String type){
Pizza pizza;
if (type.equals("cheese")){ pizza = new CheesePizza();}else if (type.equals("pepperoni")){ pizza = new PepperoniPizza();}else if (type.equals("greek")){ pizza = new GreekPizza();}
pizza.prepare();pizza.bake();pizza.cut();pizza.box();
return pizza; }}
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
10
public class PizzaStore { public Pizza orderPizza(String type){
Pizza pizza;
pizza.prepare();pizza.bake();pizza.cut();pizza.box();
return pizza; }}
//Keluarkan Kode & Buat objek khusus untuk // membuat Pizza PizzaFactory
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
11
public class SimplePizzaFactory { public Pizza createPizza(String type){
Pizza pizza = null;
if (type.equals("cheese")){ pizza = new CheesePizza();}else if (type.equals("pepperoni")){ pizza = new PepperoniPizza();}else if (type.equals("greek")){ pizza = new GreekPizza();}
return pizza; }}
Buat kelas factory untuk menghasilkan objek Pizza
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
12
public class PizzaStore { SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory){this.factory = factory;
}
public Pizza orderPizza(String type){Pizza pizza;
pizza = factory.createPizza(type);
pizza.prepare();pizza.bake();pizza.cut();pizza.box();
return pizza; }}
composition
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
13
Class Diagram : Simple FactoryPizza
prepare()bake()cut()box()
SimplePizzaFactory
createPizza()
PizzaStore
orderPizza()
ClamPizza
GreekPizzaPepperoniPizza
CheesePizza
14
FACTORY METHOD
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
15
PizzaStore
ChicagoPizzaStore
NYPizzaStore
NYPizzaStore nyFactory = new NYPizzaFactory();PizzaStore nyStore = new PizzaStore(nyFactory);nyStore.order(“cheese”);
ChicacoPizzaStore chicagoFactory = new ChicacoPizzaFactory();PizzaStore chicagoStore = new PizzaStore (chicagoFactory);chicagoStore.order(“cheese”);
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
16
public abstract class PizzaStore {
public Pizza orderPizza(String type){Pizza pizza;
pizza = createPizza(type);
pizza.prepare();pizza.bake();pizza.cut();pizza.box();
return pizza; }
public abstract Pizza createPizza(String type);
}
PizzaStore
ChicagoPizzaStore NYPizzaStore
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
17
public class NYPizzaStore extends PizzaStore {
public Pizza createPizza(String type) { Pizza pizza = null; if (type.equals("cheese")){
pizza = new NYCheesePizza(); } else if (type.equals("pepperoni")){
pizza = new NYPepperoniPizza(); }else if (type.equals("greek")){
pizza = new NYGreekPizza(); }
return pizza; }}
public class ChicagoPizzaStore extends PizzaStore {
public Pizza createPizza(String type) { Pizza pizza = null; if (type.equals("cheese")){
pizza = new ChicagoCheesePizza(); } else if (type.equals("pepperoni")){
pizza = new ChicagoPepperoniPizza(); } else if (type.equals("greek")){
pizza = new ChicagoGreekPizza(); }
return pizza; }}
NYPizzaStore Class
ChicagoPizzaStore Class
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
18
Factory Method
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
19
public class NYCheesePizza extends Pizza { public NYCheesePizza(){
name = "NY Style Sauce and Cheese Pizza";dough = "Thin Crust dough";sauce = "Marinara Sauce";topping = "Grated Reggiano Cheese";
}}
public class NYPepperoniPizza extends Pizza {public NYPepperoniPizza(){
name = "Chicago Style Deep Dish Cheese Pizza";dough = "Extra Thick Crust Dough";sauce = "Plum Tomato Sauce";topping = "Shredded Mozzarella";
}
public void cut (){System.out.println("Cutting the pizza into square slices ");
}}
public class NYGreekPizza extends Pizza {public NYGreekPizza () {
name = "NY Style Greek Pizza";dough = "Thin Crust dough";sauce = "Barbeque Sauce";topping = "Mushroom with Parmesan";
}}
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
20
public class TestPizza {public static void main(String[] args) {
PizzaStore nyStore = new NYPizzaStore();Pizza pizza = nyStore.orderPizza("cheese");
}}
Output :Preparing NY Style Sauce and Cheese PizzaTossing dough ... Adding sauce ... Adding topping ... Grated Reggiano CheeseBake for 25 minutes at 350Cutting the pizza into diagonal slicesPlace pizza in official PizzaStore box
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
21
All factory patterns encapsulate object creation. The Factory Method Pattern encapsulates object
creation by letting subclasses decide what objects to create.
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
22
The Creator Classes
PizzaStore
ChicagoPizzaStore
NYPizzaStore
The Product Classes
Pizza
NYCheesePizza
NYPepperoniPizza
NYGreekPizza
ChicagoCheesePizza
ChicagoPepperoniPizza
ChicagoGreekPizza
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
23
The Factory Method Pattern defines an interface for creating an object, but lets subclass decide which
class to instantiate
Factory Method -- Definisi
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
24
Factory Method – Class Diagram
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
25
• http://www.eelke.com/files/cs330/factory.pdf • Head First Design Pattern
Referensi
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
26
Latihan1. Terapkan Simple Factory pada contoh DuckStore.
public class DuckStore { public void orderDuck(String type){ Duck duck = null; if (type.equals("rubber")){ duck = new RubberDuck(); } else { duck = new DecoyDuck(); } duck.paint(); duck.pack(); } }
public class Test { public static void main(String [] args){ DuckStore store = new DuckStore(); System.out.println("Order RUBBER DUCK"); store.orderDuck("rubber"); System.out.println("Order DECOY DUCK"); store.orderDuck("decoy"); }}
public class Duck { String color; String material; public Duck(String color, String material) { this.color = color; this.material = material; } public void paint(){ System.out.println("Cat bebek dengan warna "+color); } public void pack(){ System.out.println("Masukkan mainan bebek " +material+" ke dalam kotak"); }}
public class RubberDuck extends Duck { public RubberDuck() { super("YELLOW", "PLASTIC"); } }
public class DecoyDuck extends Duck{ public DecoyDuck() { super("BROWN", "WOOD"); } }
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
27
SimpleDuckFactory
createDuck(String type)
DecoyDuck
DecoyDuck()
RubberDuck
RubberDuck()
Duck
Duck(Stringcolor, String material)paint()pack()
String colorString material
DuckStore
DuckStore(SimpleDuckFactory f)orderDuck(String type)
SimpleDuckFactory factory
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
28
2. Ada 2 pabrik pembuat mainan bebek yaitu FactoryA dan FactoryB dimana masing-masing membuat kedua jenis bebek (Rubber dan Decoy). Penjelasan :
Terapkan Factory Method utk skenario di atas.
Tipe Color Material
RubberDuckA ORANGE STANDAR PLASTIC
DecoyDuckA BLACK MERANTI WOOD
RubberDuckB YELLOW PREMIUM PLASTIC
DecoyDuckB BROWN JATI WOOD
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
29
DuckFactory
createDuck(String type)
DecoyDuckADecoyDuck(color, material)
RubberDuckARubberDuck(color, material)
Duck
Duck(Stringcolor, String material)paint()pack()
String colorString material
FactoryA FactoryB
DecoyDuckBDecoyDuck(color, material)
RubberDuckBRubberDuck(color, material)
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
30
ABSTRACT FACTORY
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
31
Contoh Kasus
• Pizza Store• Tiap pizza komposisinya : dough, sauce,
cheese, veggies, dan clams.• Tiap lokasi bisa berbeda jenis komposisi.
Komposisi New York Chicago
Dough thin & crust Thick & crust
Sauce Marinara Plum tomato
Cheese Reggiano Mozzarella
Clams Fresh Frozen
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
32
Bagaimana memastikan bahwa Pizza Store di NY, Chicago, dll
akan menggunakan komposisi bahan yg sama?
Bagaimana membuat sebuah kelas yang dapat men-create
serangkaian produk?
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
33
Solusi
1. Buat abstrak/interface sbg factory untuk create serangkaian produk, contoh : PizzaIngredientsFactory
2. Buat kelas : Dough, Sauce, Cheese, Clams beserta subclass masing-masing.
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
34
Solusi (cont.)3. Buat subclass dari factory, dlm hal ini
PizzaIngredientsFactory
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
35
4. Buat kelas Pizza
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
36
5. Buat subclass dari Pizza, misalnya CheesePizza, ClamPizza, dll
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
37
6. Buat kelas PizzaStore dan turunannya : NYPizzaStore, ChicagoPizzaStore, dll.
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
38
• Contoh main class
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
39
Abstract Factory
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
40
Definisi
The Abstract Factory Pattern provides an interface for creating a related or dependent objects without
specifying their concrete classes
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
41
Aplikasi
• Klien terpisah dari bagaimana produk terbentuk.
• Objek dibuat sebagai satu kesatuan• Menyediakan sekumpulan kelas namun tidak
menyediakan implementasinya.
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
42
Contoh 2• Aplikasi untuk mendesain taman. Sebuah taman
diisi 3 jenis tumbuhan yang lokasi berbeda yaitu sisi pusat, tepi, dan pojok. Tanaman untuk ketiga lokasi ini berbeda tergantung tema tamannya : tahunan (annual), sayuran (vegetables), atau sepanjang tahun (perennial).
Terapkan Abstract Factory!
Tema Pusat Tepi Pojok
Annual Dicentrum Sedum Astilbe
Vegetables Brocolli Corn Peas
Perennial Anemone Dianthus Aster
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
43
Solusi
1. Buat abstract factory : GardenFactory2. Buat kelas : Tanaman3. Buat subkelas Tanaman : broccoli, peas, corn,
astilbe, dicentrum, sedum4. Buat class : Garden5. Buat subkelas GardenFactory : VegieGarden,
AnnualGarden, dan PerennialGarden
Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang
44
Tugas
1. Buat juga untuk AnnualGarden dan PerennialGarden
2. Buat program pengujinya.