Hai, kanca! Dina iki kita bakal terus sinau pola desain. Ing wulangan iki, kita bakal ngomong babagan pabrik. Kita bakal ngrembug masalah sing ditanggulangi pola iki lan deleng conto carane pabrik bisa mbantu sampeyan mbukak warung kopi. Kajaba iku, aku bakal menehi 5 langkah prasaja kanggo nggawe pabrik.
Kanggo mesthekake yen kita kabeh padha ing dawa gelombang sing padha lan sampeyan bakal cepet ngerti konsep iki, sampeyan kudu ngerti topik ing ngisor iki:
Langkah 2. Sampeyan nggawe lapangan

- Pusaka ing Jawa
- Narrowing lan widening jinis referensi ing Jawa
- Interaksi antarane macem-macem kelas lan obyek.
Apa iku pabrik?
Pola desain pabrik ngidini sampeyan ngontrol nggawe obyek. Proses nggawe obyek anyar ora super prasaja, nanging uga ora rumit banget. Kita kabeh ngerti yen kita butuhnew
operator kanggo nggawe obyek anyar. Mbok misale jek sing ana apa-apa kanggo kontrol kene, nanging sing ora bener. Upamane lamaran kita nduweni golongan tartamtu kang akeh turunane. Kesulitan bisa muncul nalika perlu kanggo nggawe conto kelas tartamtu gumantung ing kahanan tartamtu. Pabrik minangka pola desain sing mbantu ngatasi masalah nggawe macem-macem obyek gumantung ing kahanan tartamtu . Kepiye konsep abstrak? Iki bakal dadi luwih jelas lan luwih spesifik nalika ndeleng conto ing ngisor iki.
Ayo nyiyapake macem-macem jinis kopi
Upaminipun kita pengin ngotomatisasi warung kopi. Kita kudu mulang program kita carane nggawe macem-macem jinis kopi. Kanggo nindakake iki, kita bakal nggawe kelas kopi lan sawetara kelas turunan kanggo makili jinis kopi sing bakal disiapake: Americano, cappuccino, espresso, lan latte. Ayo diwiwiti kanthi kelas kopi umum:
public class Coffee {
public void grindCoffee(){
// Grind the coffee
}
public void makeCoffee(){
// Brew the coffee
}
public void pourIntoCup(){
// Pour into a cup
}
}
Sabanjure, kita bakal nggawe kelas anak:
public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
Pelanggan bisa pesen kopi apa wae. Pesenan kasebut kudu dikirim menyang program kasebut. Iki bisa ditindakake kanthi pirang-pirang cara, contone, nggunakake String
. Nanging sing enum
paling apik kanggo iki. Kita bakal nggawe enum
lan nemtokake kolom enum sing cocog karo jinis kopi sing bisa dipesen:
public enum CoffeeType {
ESPRESSO,
AMERICANO,
CAFFE_LATTE,
CAPPUCCINO
}
Agung. Saiki ayo nulis kode kanggo warung kopi kita:
public class CoffeeShop {
public Coffee orderCoffee(CoffeeType type) {
Coffee coffee = null;
switch (type) {
case AMERICANO:
coffee = new Americano();
break;
case ESPRESSO:
coffee = new Espresso();
break;
case CAPPUCCINO:
coffee = new Cappucсino();
break;
case CAFFE_LATTE:
coffee = new CaffeLatte();
break;
}
coffee.grindCoffee();
coffee.makeCoffee();
coffee.pourIntoCup();
System.out.println("Here's your coffee! Thanks! Come again!");
return coffee;
}
}
Cara kasebut orderCoffee
bisa dipérang dadi rong bagéan:
- Nggawe conto kopi tartamtu ing
switch
statement. Ing kene pabrik nindakake apa sing ditindakake - nggawe jinis tartamtu gumantung saka kahanan. - Preparation - iki mecah, brewing, lan pouring menyang tuwung.
- Langkah-langkah sing ana ing persiapan dhewe (grinding, brewing, lan pour menyang cangkir) bakal tetep ora owah (paling ora kita ngetung iki).
- Nanging macem-macem kopi bisa diganti. Mungkin kita bakal miwiti nggawe mocha ... Frappu ... Mochacci ... Apa wae, jinis kopi anyar.
switch
statement metode kasebut. Bisa uga ing warung kopi kita, orderCoffee
metode kasebut ora mung minangka papan kanggo nggawe macem-macem jinis kopi. Akibaté, owah-owahan kudu digawe ing sawetara panggonan. Sampeyan mbokmenawa wis ngerti apa sing dakkarepake. Kita kudu refactor. Pindhah blok sing tanggung jawab kanggo nggawe kopi menyang kelas sing kapisah amarga rong alasan:
- Kita bisa nggunakake maneh logika nggawe kopi ing panggonan liya.
- Yen macem-macem diganti, kita ora kudu ngowahi kode ing endi wae kopi digawe. Cukup kanggo ngganti kode kita ing sak panggonan.
Nggawe pabrik pisanan kita
Kanggo nindakake iki, kita bakal nggawe kelas anyar sing mung tanggung jawab kanggo nggawe kelas kopi sing dibutuhake:
public class SimpleCoffeeFactory {
public Coffee createCoffee(CoffeeType type) {
Coffee coffee = null;
switch (type) {
case AMERICANO:
coffee = new Americano();
break;
case ESPRESSO:
coffee = new Espresso();
break;
case CAPPUCCINO:
coffee = new Cappucino();
break;
case CAFFE_LATTE:
coffee = new CaffeLatte();
break;
}
return coffee;
}
}
Sugeng rawuh! Kita mung nerapake pola desain pabrik ing wangun sing paling gampang (meh). Bisa uga luwih gampang yen kita nggawe createCoffee
metode statis. Nanging banjur kita bakal kelangan rong kemampuan:
- Kemampuan kanggo marisi
SimpleCoffeeFactory
lan ngatasicreateCoffee
metode kasebut. - Kemampuan kanggo nambah implementasi pabrik sing dibutuhake ing kelas kita.
Tambah pabrik ing warung kopi
Ayo nulis ulang kelas warung kopi nggunakake pabrik:
public class CoffeeShop {
private final SimpleCoffeeFactory coffeeFactory;
public CoffeeShop(SimpleCoffeeFactory coffeeFactory) {
this.coffeeFactory = coffeeFactory;
}
public Coffee orderCoffee(CoffeeType type) {
Coffee coffee = coffeeFactory.createCoffee(type);
coffee.grindCoffee();
coffee.makeCoffee();
coffee.pourIntoCup();
System.out.println("Here's your coffee! Thanks! Come again!");
return coffee;
}
}
Banget. Saiki kita bakal menehi katrangan ringkes babagan struktur umum pola desain pabrik.
5 langkah kanggo mbukak pabrik dhewe
Langkah 1. Program sampeyan duwe kelas kanthi sawetara turunan, kaya ing diagram ing ngisor iki:
enum
kanthi lapangan kanggo saben kelas bocah:
enum CatType {
LION,
TIGER,
FLUFFY
}
Langkah 3. Mbangun pabrik Panjenengan. Sebut wae CatFactory
. Iki kode:
class CatFactory {}
Langkah 4. Ing pabrik sampeyan, nggawe createCat
cara sing njupuk CatType
bantahan. Iki kode:
class CatFactory {
public Cat createCat(CatType type) {
}
}
Langkah 5. Ing awak saka cara, nulis switch
statement sing enumerates kolom enum lan nggawe Kayata saka kelas sing cocog karo enum
nilai liwati:
class CatFactory {
public Cat createCat(CatType type) {
Cat cat = null;
switch (type) {
case LION:
cat = new Fluffy();
break;
case TIGER:
cat = new Tiger();
break;
case FLUFFY:
cat = new Lion();
break;
}
return cat;
}
}
Saiki sampeyan bisa mbukak pabrik kaya bos. :)
GO TO FULL VERSION