Saya sedang membaca artikel pemrograman dan disebutkan pola dekorator. Saya telah memprogram untuk sementara waktu tetapi tanpa pendidikan atau pelatihan formal apa pun, tetapi saya mencoba mempelajari tentang pola standar dan semacamnya.
Jadi saya mencari Dekorator, dan menemukan artikel Wikipedia di atasnya. Saya sekarang mengerti konsep pola Penghias, tetapi saya agak bingung dengan bagian ini:
Sebagai contoh, pertimbangkan sebuah jendela dalam sistem windowing. Untuk mengizinkan pengguliran konten jendela, kami mungkin ingin menambahkan scrollbar horizontal atau vertikal, sesuai keperluan. Asumsikan windows diwakili oleh instance dari kelas Window, dan menganggap kelas ini tidak memiliki fungsionalitas untuk menambahkan scrollbar. Kita bisa membuat ScrollingWindow subclass yang menyediakannya, atau kita bisa membuat ScrollingWindowDecorator yang menambahkan fungsionalitas ini ke objek Window yang ada. Pada titik ini, solusi mana pun akan baik-baik saja.
Sekarang mari kita asumsikan kita juga menginginkan kemampuan untuk menambahkan batas pada windows kita. Sekali lagi, kelas Window asli kami tidak memiliki dukungan. Subclass ScrollingWindow sekarang menimbulkan masalah, karena telah secara efektif menciptakan jendela jenis baru. Jika kita ingin menambahkan dukungan perbatasan ke semua jendela, kita harus membuat subkelas WindowWithBorder dan ScrollingWindowWithBorder. Jelas, masalah ini semakin buruk dengan setiap fitur baru yang akan ditambahkan. Untuk solusi dekorator, kita cukup membuat BorderedWindowDecorator baru — saat runtime, kita dapat mendekorasi jendela yang ada dengan ScrollingWindowDecorator atau BorderedWindowDecorator atau keduanya, sesuai keinginan kita.
OK, ketika mereka mengatakan untuk menambahkan perbatasan ke semua jendela, mengapa tidak menambahkan fungsionalitas ke dalam kelas Window asli untuk memungkinkan opsi? Seperti yang saya lihat, subkelas hanya untuk menambahkan fungsionalitas spesifik ke kelas, atau mengganti metode kelas. Jika saya perlu menambahkan fungsionalitas ke semua objek yang ada, mengapa saya tidak memodifikasi superclass saja?
Ada baris lain di artikel itu:
Pola dekorator adalah alternatif untuk subclassing. Subkelas menambahkan perilaku pada waktu kompilasi, dan perubahan memengaruhi semua instance kelas asli; mendekorasi dapat memberikan perilaku baru pada saat run-time untuk objek individu.
Saya tidak mendapatkan apa yang mereka katakan "... perubahan memengaruhi semua instance dari kelas asli" - bagaimana subklas mengubah kelas induk? Bukankah itu inti dari subklasifikasi?
Saya akan berasumsi bahwa artikel itu, seperti banyak Wiki, tidak ditulis dengan jelas. Saya bisa melihat kegunaan Penghias di baris terakhir - "... memberikan perilaku baru saat run-time untuk objek individu."
Tanpa membaca tentang pola ini, jika saya perlu mengubah perilaku pada saat run-time untuk masing-masing objek, saya mungkin akan membangun beberapa metode menjadi super atau subkelas untuk mengaktifkan / menonaktifkan perilaku tersebut. Tolong bantu saya benar-benar memahami kegunaan Dekorator, dan mengapa pemikiran pemula saya cacat?