Kita wis dideleng nggunakake obyek singleton, nanging sampeyan bisa uga durung éling sing strategi iki pola desain, lan salah siji sing paling digunakake ing.
Nyatane, ana akeh pola kasebut, lan bisa diklasifikasikake miturut tujuan tartamtu.
Klasifikasi pola
Tipe pola | Aplikasi |
---|---|
kreasi | Jinis sing ngrampungake masalah nggawe obyek |
Struktural | Pola sing ngidini kita mbangun hierarki kelas sing bener lan bisa diperluas ing arsitektur kita |
Kelakuane | Klompok pola iki nggampangake interaksi sing aman lan trep antarane obyek ing program. |
Biasane, pola ditondoi dening masalah sing ditanggulangi. Ayo goleki sawetara pola sing asring kita temoni nalika nggarap Jawa:
Pola | tujuane |
---|---|
Singleton | Kita wis kenal karo pola iki - digunakake kanggo nggawe lan ngakses kelas sing ora bisa duwe luwih saka siji conto. |
Iterator | Kita uga kenal karo siji iki. Kita ngerti manawa pola iki ngidini kita ngulang obyek koleksi tanpa nuduhake perwakilan internal. Iki digunakake karo koleksi. |
Adaptor | Pola iki nyambungake obyek sing ora kompatibel supaya bisa kerja bareng. Aku jeneng pola adaptor mbantu mbayangno persis apa iki. Punika conto prasaja saka urip nyata: adaptor USB kanggo stopkontak tembok. |
Metode Cithakan |
Pola pemrograman prilaku sing ngrampungake masalah integrasi lan ngidini sampeyan ngganti langkah algoritma tanpa ngganti struktur algoritma. Mbayangno yen kita duwe algoritma perakitan mobil kanthi urutan langkah perakitan: Sasis -> Badan -> Mesin -> Interior Kabin Yen kita sijine pigura dikiataken, mesin luwih kuat, utawa interior karo cahya tambahan, kita ora kudu ngganti algoritma, lan urutan abstrak tetep padha. |
Dekorator | Pola iki nggawe pambungkus kanggo obyek kanggo menehi fungsi migunani. Kita bakal nimbang minangka bagéan saka artikel iki. |
Ing Java.io, kelas ing ngisor iki ngetrapake pola:
Pola | Ngendi digunakake ing java.io |
---|---|
Adaptor |
|
Metode Cithakan | |
Dekorator |
Pola dekorator
Ayo bayangake yen kita nggambarake model kanggo desain omah.
Umumé, pendekatan katon kaya iki:
Kaping pisanan, kita duwe pilihan sawetara jinis omah. Konfigurasi minimal yaiku siji lantai kanthi atap. Banjur kita nggunakake kabeh jinis dekorator kanggo ngganti paramèter tambahan, sing kanthi alami mengaruhi rega omah.
Kita nggawe kelas House abstrak:
public abstract class House {
String info;
public String getInfo() {
return info;
}
public abstract int getPrice();
}
Ing kene kita duwe 2 cara:
- getInfo () ngasilake informasi babagan jeneng lan fitur omah kita;
- getPrice () ngasilake rega konfigurasi omah saiki.
Kita uga duwe implementasine House standar - bata lan kayu:
public class BrickHouse extends House {
public BrickHouse() {
info = "Brick House";
}
@Override
public int getPrice() {
return 20_000;
}
}
public class WoodenHouse extends House {
public WoodenHouse() {
info = "Wooden House";
}
@Override
public int getPrice() {
return 25_000;
}
}
Loro-lorone kelas kasebut marisi kelas House lan ngilangi cara regane, nyetel rega khusus kanggo omah standar. Kita nyetel jeneng ing konstruktor.
Sabanjure, kita kudu nulis kelas dekorator. Kelas iki uga bakal oleh warisan kelas House . Kanggo nindakake iki, kita nggawe kelas dekorator abstrak.
Ing kana kita bakal menehi logika tambahan kanggo ngganti obyek. Kaping pisanan, ora bakal ana logika tambahan lan kelas abstrak bakal kosong.
abstract class HouseDecorator extends House {
}
Sabanjure, kita nggawe implementasi dekorator. Kita bakal nggawe sawetara kelas sing ngidini kita nambah fitur tambahan ing omah:
public class SecondFloor extends HouseDecorator {
House house;
public SecondFloor(House house) {
this.house = house;
}
@Override
public int getPrice() {
return house.getPrice() + 20_000;
}
@Override
public String getInfo() {
return house.getInfo() + " + second floor";
}
}
Dekorator sing nambah lantai loro ing omah kita |
Konstruktor dekorator nampa omah sing bakal "hiasan", yaiku nambah modifikasi. Lan kita ngalahake cara getPrice () lan getInfo () , bali informasi babagan omah anyar dianyari adhedhasar lawas.
public class Garage extends HouseDecorator {
House house;
public Garage(House house) {
this.house = house;
}
@Override
public int getPrice() {
return house.getPrice() + 5_000;
}
@Override
public String getInfo() {
return house.getInfo() + " + garage";
}
}
Dekorator sing nambah garasi ing omah kita |
Saiki kita bisa nganyari omah kita karo dekorator. Kanggo nindakake iki, kita kudu nggawe omah:
House brickHouse = new BrickHouse();
Sabanjure, kita nyetel kitaomahvariabel padha karo dekorator anyar, ngliwati omah kita:
brickHouse = new SecondFloor(brickHouse);
kitaomahvariabel saiki dadi omah kanthi lantai loro.
Ayo goleki kasus panggunaan sing nglibatake dekorator:
Tuladha kode | Output |
---|---|
|
Omah bata 20000 |
|
Omah bata + lantai loro 40000 |
|
Omah bata + lantai loro + garasi 45000 |
|
Omah Kayu + garasi + lantai loro 50000 |
|
Omah Kayu 25000 Omah Kayu + Garasi 30000 |
Conto iki nggambarake keuntungan kanggo nganyarke obyek kanthi dekorator. Dadi kita ora nggantiomah kayuobyek dhewe, nanging nggawe obyek anyar adhedhasar lawas. Kene kita bisa ndeleng sing kaluwihan teka karo cacat: kita nggawe obyek anyar ing memori saben wektu, nambah konsumsi memori.
Deleng diagram UML program kita:
A decorator duwe implementasine super prasaja lan mbosenke ngganti obyek, nganyarke mau. Dekorator bisa dikenali dening konstruktor sing, kang njupuk minangka obyek paramèter saka jinis abstrak padha utawa antarmuka minangka kelas saiki. Ing Jawa, pola iki akeh digunakake ing kelas I/O.
Contone, kaya sing wis dingerteni, kabeh subkelas java.io.InputStream , OutputStream , Reader lan Writer duwe konstruktor sing nampa obyek saka kelas sing padha.
GO TO FULL VERSION