Menjawab pertanyaan yang sangat lama. (apakah ada yang melihat jawaban terbaru, bukan yang paling banyak dipilih?)
Ini adalah kebingungan yang valid karena kesamaannya. Baik pola Strategi dan Perintah menggunakan enkapsulasi . Tapi itu tidak membuat mereka sama.
Perbedaan utamanya adalah memahami apa yang dienkapsulasi. Prinsip OO, kedua pola bergantung pada, adalah Enkapsulasi apa yang bervariasi .
Dalam hal strategi, yang bervariasi adalah algoritma . Misalnya, satu objek strategi mengetahui cara mengeluarkan ke file XML, sedangkan yang lainnya menghasilkan, katakanlah, JSON. Algoritme yang berbeda disimpan ( dienkapsulasi ) di kelas yang berbeda. Sesederhana itu.
Dalam hal perintah, yang bervariasi adalah permintaan itu sendiri. Permintaan mungkin datang dari File Menu > Delete
atau Right Click > Context Menu > Delete
atauJust Delete Button pressed
. Ketiga kasus tersebut dapat menghasilkan 3 objek perintah dengan tipe yang sama. Objek perintah ini hanya mewakili 3 permintaan penghapusan; bukan algoritma penghapusan. Karena permintaan adalah sekumpulan objek sekarang, kami dapat mengelolanya dengan mudah. Tiba-tiba, menyediakan fungsionalitas seperti urung atau ulangi menjadi hal yang sepele.
Tidak peduli bagaimana perintah mengimplementasikan logika yang diminta. Saat memanggil execute (), ia dapat mengimplementasikan algoritma untuk memicu penghapusan atau bahkan dapat mendelegasikannya ke objek lain, bahkan dapat mendelegasikannya ke strategi. Ini hanya detail implementasi dari pola perintah. Inilah sebabnya mengapa ini dinamai sebagai perintah meskipun ini bukan cara yang sopan untuk meminta : -)
Bandingkan dengan strategi; pola ini hanya berkaitan dengan logika aktual yang dieksekusi. Jika kita melakukan itu, akan membantu untuk mencapai kombinasi perilaku yang berbeda dengan sekumpulan kelas minimal, sehingga mencegah ledakan kelas.
Saya pikir, Command membantu kita untuk memperluas pemahaman kita tentang enkapsulasi sementara Strategi menyediakan penggunaan enkapsulasi dan polimorfisme secara alami.