Wednesday, October 14, 2009

Design Pattern in Brief (7)

Decorator

Dalam pemrograman OOP kita pasti sudah terbiasa dengan pattern inheritance. Inheritance adalah salah satu dasar dari OOP. Decorator bisa dibilang kebalikan dari inheritance. Untuk lebih memahami pattern ini perhatikan contoh berikut :

Misal kita mempunyai struktur class untuk logger seperti gambar berikut :



Dan selanjutnya sesuai dengan bisnis proses yang ada, kita diharuskan untuk bisa menampilkan dan menyimpan log berupa struktur HTML dan text terenkripsi. Bagaimana kita melakukan ini? Pendekatan pertama kita adalah dengan melakukan inheritance terhadap ConsoleLogger dan FileLogger. Dengan demikian kita akan mendapatkan struktur class seperti gambar berikut :



Dengan diagram di atas kita akan mendapatkan struktur file yang kompleks. Kita akan mencoba mengatasinya dengan pattern Decorator. Decorator menyarankan agar kita menggunakan wrapper, bukan inheritance. Pada contoh di atas, Decorator yang akan kita buat harus juga implements interface yang sama dengan object yang akan kita buat wrappernya, dalam hal ini interface Logger. Saat klien berinteraksi dengan decorator, mereka berinteraksi dengan cara yang sama seperti berinteraksi dengan object yang dibut wrappernya. Berikut adalah diagram untuk decorator :



Terlihat dari diagram di atas bahwa HTMLLogger dan EncryptLogger override method log(String) dari class di atasnya. Di dalam masing2 method tersebut HTMLLogger membuat inputan yang di-log berbentuk html dan EncryptLogger mengenkripsi inputannya. Bagaimana selanjutnya cara menampilkan ke console atau ke file? Perhatikan bahwa LoggerDecorator mempunyai sebuah variabel logger bertipe Logger. Variabel ini bisa diisi dengan wrapper class yang sesuai, misal ConsoleLogger atau FileLogger.

Berikut adalah diagram akhir yang menggambarkan struktur class :


0 comments:

 

©2009 Stay the Same | by TNB