Facade Design Pattern Surya | 7409040001 Kemal | 7409040003 Fariz | 7409040004 Deny | 7409040012
Facade Menyediakan Interface yang seragam untuk satu set interface dalam sebuah subsistem Membungkus subsistem yang rumit dengan interface yang sederhana
Penggunaan Facade Digunakan ketika segmen dari client membutuhkan interface yang sederhana untuk menjalankan semua fungsi dari subsitem yang kompleks
Contoh Struktur Facade
Contoh Facade
Contoh Penggunaan Facade Jelaskan : “Pertimbangkan misalnya pemrograman aplikasi yang memberikan akses ke subsistem compiler nya. Subsistem ini berisi class seperti Scanner, Parser, ProgramNode,BytecodeStream, dan ProgramNodeBuilder yang menerapkan compiler. Beberapa aplikasi khusus mungkin perlu untuk mengakses class secara langsung. Tetapi kebanyakan klien dari compiler umumnya tidak peduli tentang rincian seperti parsing dan generasi kode, mereka hanya ingin mengkompilasi beberapa kode. Bagi mereka, interface kuat tapi low-level dalam subsistem kompiler hanya mempersulit tugas mereka. Untuk menyediakan higher-level interface yang dapat membantu client dari class-class tersebut,Compiler subsystem juga mempunyai sebuah compiler class. class ini mendefinisikan antarmuka yang seragam untuk fungsi compiler.compiler class bertindak sebagai façade:menyediakan client interface single dan simple untuk mengakses subsistem compiler. Facade compiler membuat hidup lebih mudah bagi kebanyakan programmer tanpa menyembunyikan fungsi tingkat rendah dari beberapa yang membutuhkannya.seperti yang di jelaskan pada gambar “
Gunakan Façade Saat ingin menyediakan interface yang simple dari subsystem yang kompleks. ada banyak dependensi antara klien dan class implementasi dari abstraksi
Participants Façade (compiler) Mengetahui subsystem class mana yang responsibel untuk di request. delegasi permintaan klien untuk objek subsistem yang tepat.
Participants (cont’d) Subsystem Class (Scanner, Parser, ProgramNode, etc) melaksanakan fungsi subsistem. menangani pekerjaan yang ditugaskan oleh objek Facade.
Studi Kasus
Studi Kasus
Permasalahan Ketika film selesai, bagaimana Anda mematikan semuanya? Tidakkah Anda harus melakukan semua ini lagi, secara terbalik? Akankah sekompleks saat mendengarkan CD atau radio? Jika Anda memutuskan untuk meng-upgrade sistem Anda, Anda mungkin akan harus belajar prosedur yang sedikit berbeda.
Class Diagram watchMovie() Play() On()
Penjelasan Membuat facade untuk sistem home theater Class façade memperlakukan komponen home theater sebagai subsystem,dan memanggil pada subsystem untuk mengimplementasikan watchMovie() method Client sekarang memanggil method pada home theater façade,tidak pada subsystem Façade masih menyisakan akses subsystem untuk di gunakan secara langsung
Membangun Home Theatre Facade public class HomeTheaterFacade { Amplifier amp; Tuner tuner; DvdPlayer dvd; CdPlayer cd; Projector projector; TheaterLights lights; Screen screen; PopcornPopper popper; Semua komponen dari subsystem yang akan kita gunakan
Membangun Home Theatre Facade public HomeTheaterFacade(Amplifier amp, Tuner tuner, DvdPlayer dvd, CdPlayer cd, Projector projector, Screen screen, TheaterLights lights, PopcornPopper popper) { Facade melewatkan sebuah references untuk setiap komponen subsistem dalam konstruktor. Facade kemudian memberikan setiap variabel contoh yang sesuai.
Membangun Home Theatre Façade (cont’d) this.amp = amp; this.tuner = tuner; this.dvd = dvd; this.cd = cd; this.projector = projector; this.screen = screen; this.lights = lights; this.popper = popper; } // other methods here
Implementing Simplified Interface public void watchMovie(String movie) { System.out.println(“Get ready to watch a movie...”); popper.on(); popper.pop(); lights.dim(10); screen.down(); projector.on(); projector.wideScreenMode(); amp.on(); amp.setDvd(dvd); amp.setSurroundSound(); amp.setVolume(5); dvd.on(); dvd.play(movie); } watchMovie () mengikuti urutan yang sama kita harus melakukan dengan tangan sebelumnya, tapi membungkus itu dalam metode praktis yang melakukan semua pekerjaan.
Implementing Simplified Interface (cont’d) public void endMovie() { System.out.println(“Shutting movie theater down...”); popper.off(); lights.on(); screen.up(); projector.off(); amp.off(); dvd.stop(); dvd.eject(); dvd.off(); } Dan endMovie() berperan mematikan semua untuk kita,sekali lagi, setiap tugas didelegasikan ke komponen yang sesuai dalam subsistem.
Time to watch a Movie (the easy way) public class HomeTheaterTestDrive { public static void main(String[] args) { // instantiate components here HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp, tuner, dvd, cd, projector, screen, lights, popper); homeTheater.watchMovie(“Raiders of the Lost Ark”); homeTheater.endMovie(); } Pertama Anda instantiate Facade dengan semua komponen dalam subsistem. Gunakan interface yang disederhanakan untuk pertama memulai film, dan kemudian menutupnya
Output Berikut output memanggil façade watchMovie(),beginilah semua bekerja untuk klien dan di sini, kita sudah selesai menonton film, sehingga memanggil endMovie () untuk membuat semuanya off