the factory pattern

44
Jurusan Teknik Informatika Fakultas Teknik Univ. Muhammadiyah Malang The Factory Pattern 1

Upload: catrin

Post on 24-Feb-2016

49 views

Category:

Documents


0 download

DESCRIPTION

The Factory Pattern. Tujuan Pembelajaran. Mengetahui model persoalan yang menggunakan Simple Factory & Factory Method pattern Mengetahui bagaimana menerapkan Simple Factory & Factory Method pattern pada program - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

1

The Factory Pattern

Page 2: 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

Page 3: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

3

Koleksi Desain Pattern• Creational Patterns :– Singleton– Factory

Page 4: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

4

Persoalan

Page 5: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

5

Example

Page 6: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

6

Page 7: The Factory Pattern

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

Page 8: The Factory Pattern

8

SIMPLE FACTORY

Page 9: The Factory Pattern

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; }}

Page 10: The Factory Pattern

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

Page 11: The Factory Pattern

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

Page 12: The Factory Pattern

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

Page 13: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

13

Class Diagram : Simple FactoryPizza

prepare()bake()cut()box()

SimplePizzaFactory

createPizza()

PizzaStore

orderPizza()

ClamPizza

GreekPizzaPepperoniPizza

CheesePizza

Page 14: The Factory Pattern

14

FACTORY METHOD

Page 15: The Factory Pattern

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”);

Page 16: The Factory Pattern

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

Page 17: The Factory Pattern

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

Page 18: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

18

Factory Method

Page 19: The Factory Pattern

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";

}}

Page 20: The Factory Pattern

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

Page 21: The Factory Pattern

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.

Page 22: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

22

The Creator Classes

PizzaStore

ChicagoPizzaStore

NYPizzaStore

The Product Classes

Pizza

NYCheesePizza

NYPepperoniPizza

NYGreekPizza

ChicagoCheesePizza

ChicagoPepperoniPizza

ChicagoGreekPizza

Page 23: The Factory Pattern

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

Page 24: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

24

Factory Method – Class Diagram

Page 25: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

25

• http://www.eelke.com/files/cs330/factory.pdf • Head First Design Pattern

Referensi

Page 26: The Factory Pattern

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"); } }

Page 27: The Factory Pattern

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

Page 28: The Factory Pattern

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

Page 29: The Factory Pattern

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)

Page 30: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

30

ABSTRACT FACTORY

Page 31: The Factory Pattern

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

Page 32: The Factory Pattern

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?

Page 33: The Factory Pattern

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.

Page 34: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

34

Solusi (cont.)3. Buat subclass dari factory, dlm hal ini

PizzaIngredientsFactory

Page 35: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

35

4. Buat kelas Pizza

Page 36: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

36

5. Buat subclass dari Pizza, misalnya CheesePizza, ClamPizza, dll

Page 37: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

37

6. Buat kelas PizzaStore dan turunannya : NYPizzaStore, ChicagoPizzaStore, dll.

Page 38: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

38

• Contoh main class

Page 39: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

39

Abstract Factory

Page 40: The Factory Pattern

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

Page 41: The Factory Pattern

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.

Page 42: The Factory Pattern

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

Page 43: The Factory Pattern

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

Page 44: The Factory Pattern

Jurusan Teknik InformatikaFakultas TeknikUniv. Muhammadiyah Malang

44

Tugas

1. Buat juga untuk AnnualGarden dan PerennialGarden

2. Buat program pengujinya.