Pola Strategi berfungsi dengan baik untuk menghindari besar jika ... konstruksi yang lain dan membuatnya lebih mudah untuk menambah atau mengganti fungsi. Namun, menurut saya masih ada satu kekurangan. Sepertinya dalam setiap implementasi masih perlu ada konstruksi percabangan. Mungkin pabrik atau file data. Sebagai contoh, ambil sistem pemesanan.
Pabrik:
// All of these classes implement OrderStrategy
switch (orderType) {
case NEW_ORDER: return new NewOrder();
case CANCELLATION: return new Cancellation();
case RETURN: return new Return();
}
Kode setelah ini tidak perlu khawatir, dan sekarang hanya ada satu tempat untuk menambahkan jenis pesanan baru, tetapi bagian kode ini masih tidak dapat diperluas. Menariknya ke dalam file data agak membantu keterbacaan (masih bisa diperdebatkan, saya tahu):
<strategies>
<order type="NEW_ORDER">com.company.NewOrder</order>
<order type="CANCELLATION">com.company.Cancellation</order>
<order type="RETURN">com.company.Return</order>
</strategies>
Tapi ini masih menambahkan kode boilerplate untuk memproses file data - diberikan, lebih mudah diuji unit dan kode yang relatif stabil, tetapi kompleksitas tambahan nontheless.
Juga, konstruksi semacam ini tidak menguji integrasi dengan baik. Setiap strategi individu mungkin lebih mudah untuk diuji sekarang, tetapi setiap strategi baru yang Anda tambahkan adalah kompleksitas tambahan untuk diuji. Ini kurang dari yang Anda miliki jika Anda tidak menggunakan pola, tetapi masih ada.
Apakah ada cara untuk menerapkan pola strategi yang mengurangi kompleksitas ini? Atau apakah ini sesederhana mungkin, dan mencoba melangkah lebih jauh hanya akan menambah lapisan abstraksi untuk sedikit atau tanpa manfaat?
eval
... mungkin tidak berfungsi di Jawa tapi mungkin dalam bahasa lain?