Corak Reka Bentuk Terdedah: Corak Strategi



Di blog ini kita akan mengungkap Pola Reka Bentuk Strategi, yang digunakan untuk membuat keluarga algoritma yang dapat ditukar yang dapat dipilih secara dinamis.

'

Selamat datang di entri pertama siri 'Design Patterns Exposed'. Dalam siri ini kita akan membongkar setiap Corak Reka Bentuk dari awal.





Dengan hanya mengetahui bahasa pengaturcaraan dan konstruksinya tidak akan menjadikan anda pengaturcara atau pembangun yang lebih baik. Ia memerlukan pengetahuan mengenai Pola Reka Bentuk untuk membuat perisian yang akan berfungsi hari ini dan juga pada masa akan datang.

Banyak pembangun telah menemui masalah reka bentuk yang anda hadapi sekarang atau akan anda hadapi pada masa akan datang. Mereka telah menentukan cara standard untuk menangani masalah itu. Jadi dengan menggunakan Corak Reka Bentuk anda mendapat kelebihan menggunakan teknik yang terbukti.



Setiap Corak Reka Bentuk adalah untuk menyelesaikan situasi tertentu, mungkin ada situasi di mana lebih dari satu Corak Reka Bentuk dapat digunakan.

Sebilangan besar pengaturcara hanya berusaha menyelesaikan masalah yang mereka hadapi tanpa peduli tentang corak reka bentuk, kod berlebihan atau bahkan gandingan ketat. Tetapi pengaturcara yang baik bermula dengan cara yang berbeza. Mereka memikirkan keperluan hari ini, keperluan masa depan, penyelenggaraan kod dan kebolehgunaan semula kod.

Pengaturcara yang baik tidak tergesa-gesa untuk memulakan pengekodan setelah mendapat syarat. Mereka duduk dan memikirkan masalah mengenai apakah reka bentuk mereka akan berfungsi. Sekiranya ya, adakah ia akan berfungsi setelah 6 bulan, bila keperluan akan berubah.



Pengaturcara yang baik mengambil pen dan kertas mereka dan mula merancang kelas dan hubungan antara kelas. Mereka cuba mendapatkan gandingan longgar dan kohesi yang tinggi dalam reka bentuk mereka, sambil melakukan semua ini, mereka mempunyai Prinsip Berorientasikan Objek dalam fikiran mereka. Mereka langsung tidak masuk ke dalam kod tahap rendah. Untuk merancang perisian yang fleksibel dan boleh digunakan semula, anda harus mengikuti pendekatan ini jika tidak, anda akan sentiasa mengubah kod yang anda tulis sebelumnya.

Hanya ada satu perkara yang berterusan dalam industri perisian dan itu Ubah. Keperluannya pasti akan terus berubah. Oleh itu, bagaimana kita merancang perisian yang mudah disesuaikan oleh kod anda dengan keperluan masa depan? Untuk itu, anda harus bermula lebih awal, dan merancang sedemikian rupa sehingga keperluan masa depan tidak melanggar kod sebelumnya.

Bagaimana saya boleh melakukannya?

Oleh itu, ia boleh dilakukan dengan mengikuti Prinsip Reka Bentuk dan Corak Reka Bentuk berdasarkan prinsip tersebut.

peruntukan memori dinamik dalam c ++

Sekarang, mari kita selami pengekodan dan mulakan perjalanan untuk menjadi pengaturcara yang lebih baik. Dalam catatan ini, kita akan membongkar salah satu corak terpenting - Corak Strategi .

Apabila saya katakan yang paling penting ia mencerminkan masalah umum yang diselesaikan dengan Strategi Pola.

Apakah Corak Strategi?

Inilah definisi langsung dari buku ‘Gang of Four’: “Pola Strategi digunakan untuk membuat keluarga algoritma yang dapat ditukar dari mana proses yang diperlukan dipilih pada waktu berjalan'

Sekiranya anda beradatidak faham, jangan risau, kita akan menerangkannya dalamlebih sederhanacarauntuk kamu membuatfaham.

Mari kita fahami terlebih dahulu masalahnya dan kemudian kita akan melihat bagaimana Corak Strategi dapat menyelesaikannya.

Dalam rajah UML di atas, kami mempunyai kelas abstrak Haiwan dan dua kelas konkrit, Anjing dan Burung, yang merangkumi kelas super Haiwan.

Oleh itu mari kita tentukan kelas abstrak Haiwan dan dua kelas konkrit, Anjing dan Burung.

Apa pendapat anda mengenai reka bentuk di atas? Terdapat satu kesilapan besar dalam reka bentuk kami.

Semua haiwan tidak boleh terbang, seperti dalam kes di atas anjing tidak boleh terbang. Tetapi masih mempunyai tingkah laku 'terbang'.

Kami melakukan kesilapan dengan menulis kaedah abstrak lalat () di dalam kelas Haiwan. Reka bentuk ini akan memaksa setiap anjing kelas, Burung, Penguin, Buaya, Angsa dll untuk melaksanakan kaedah terbang ().

Kita seharusnya memahami bahawa terbang adalah kemampuan yang tidak dimiliki oleh semua haiwan. Dengan menyediakan kaedah terbang () di kelas abstrak Haiwan, kami telah menetapkan kemampuan terbang di semua sub-kelas yang tidak tepat untuk semua sub-kelas haiwan.

Anda mungkin berfikir apa masalahnya dalam menerapkan kaedah terbang di sub-kelas. Walaupun anda dapat menerapkan kaedah terbang () dalam sub-kelas Haiwan yang tidak terbang untuk mencetak 'Saya tidak dapat terbang'. Tetapi masalahnya adalah, anda masih memberi tingkah laku terbang kepada haiwan yang tidak terbang. Ini tidak betul.

Bagaimana rasanya memanggil dog.fly () atau crocodile.fly ().

Oleh itu, sekarang kita telah memahami bahawa reka bentuk kita tidak betul dan kita harus membuang kaedah fly () dari sub-kelas Animal.

Apa cara lain untuk merancang kelas kita dengan cara yang reka bentuk kita tidak memaksa semua sub-kelas Haiwan mempunyai tingkah laku terbang.

Salah satu penyelesaian yang segera terlintas di fikiran ialah kita dapat membuat antara muka terbang dengan kaedah terbang dan hanya haiwan yang dapat terbang yang akan melaksanakan antara muka terbang tersebut. Dengan cara ini kita tidak akan menguatkuasakan semua sub-kelas Haiwan untuk menentukan tingkah laku terbang. Jadi mari kita kod pendekatan reka bentuk ini.

Sekarang, kelas Haiwan kita akan kelihatan seperti kod di bawah setelah mengeluarkan kaedah terbang dari kelas Haiwan.

Sekarang mari kita tentukan antara muka Flying

Sekarang, kelas Anjing akan ditukarsebagaikod di bawah dan tidak perlu mempunyai tingkah laku terbang.

Mari kita lihat beberapa sub-kelas Haiwan kita yang mempunyai tingkah laku terbang.

Kami telah menyelesaikan masalah kami sebelumnya, tetapi kami menghadapi masalah baru dan itu adalah 'Penduaan Kod'.

Katakanlah, kita akan mempunyai 100 sub-kelas Haiwan terbang yang berbeza. Kita harus menduplikasi kod untuk tingkah laku terbang kerana antara muka terbang tidak dapat memberikan implementasi untuk tingkah laku terbang, dan kemudian jika kita ingin mengubah pelaksanaan metode terbang () di subkelas mana pun kita harus membuka kelas itu dan mengubah kodnya, yang buruk. Kami kekurangan sesuatu yang besar dan, iaitu, kami tidak dapat mengubah tingkah laku terbang kelas pada waktu berjalan.

Tetapi jangan risau, Pola Strategi ada untuk mengeluarkan anda dari masalah ini.

Oleh itu, mari kita ubah kod kita untuk menggunakan Corak Strategi.

Antaramuka terbang akan tetap sama seperti sekarang. Sekarang, daripada setiap sub-kelas terbang yang melaksanakan antara muka terbang itu sendiri, kita akan menentukan kelas konkrit yang berasingan yang akan menerapkan tingkah laku terbang yang berbeza. Mari lihat bagaimana melakukannya.

Jadi, bagaimana semuanya berfungsi, mari kita lihat TestClass

Dengan menggunakan Strategi Pola, kita sekarang dapat mengubah tingkah laku terbang dari mana-mana haiwan pada waktu larian dan itu tanpa menerapkan subkelas untuk menentukan tingkah laku terbang itu sendiri.

Bilakah menggunakan Corak Strategi?

Apabila anda mahu dapat mengubah tingkah laku pada waktu larian secara dinamik.

Untuk memastikan anda memahami dengan jelas Corak Strategi mari kita ambil contoh lain.

Di kelas Pekerja di atas, kami menetapkan gaji pekerja bergantung pada sebutannya. Sekiranya pekerja adalah 'Intern' kita akan menambahkan bonus 10% dalam gaji pokok untuk mengira gaji sebenar.

Sekiranya pekerja adalah 'Pembangun Web' kami akan menambahkan 20% bonus dalam gaji pokok untuk mengira gaji sebenar dan proses yang serupa berlaku untuk jenis pekerja lain. Walaupun algoritma kami untuk mengira gaji sebenar sangat mudah untuk membuatnya lebih mudah difahami tetapi pada kebanyakan masa, ini merangkumi banyak perbandingan dan pengiraan.

Jadi, apa yang salah dengan kod kelas pekerja?

Baiklah, kod untuk mengira gaji (getPay ()) adalah statik. Katakan saya ingin menukar bonus untuk 'Intern' dari 10% menjadi 14%. Saya perlu membuka kod kelas Pekerja dan menukarnya.

Dan masalah lain ialah saya tidak dapat mengubah algoritma gaji pekerja pada waktu berjalan. Jadi, bagaimana caranya? Strategi Pola digunakan secara khusus untuk menangani masalah seperti ini.

Mari refactor kod untuk menggunakan Corak Strategi.

Saya akan menentukan beberapa algoritma untuk mengira gaji. Kemudian saya akan dapat menggunakan mana-mana algoritma ini untuk mengira gaji pada waktu berjalan.

Sekarang, mari kita lihat bagaimana kelas Pekerja akan berubah.

Catatan: Saya telah membuang logik pengiraan gaji dari kelas Pekerja dan membuat kaedah PayAlgorithm () yang akan saya tetapkan untuk menetapkan PayAlgorithm yang saya mahu gunakan untuk pengiraan gaji.

Ini akan memberi saya fleksibiliti untuk mengira gaji dengan menentukan sebarang Algoritma Pay secara dinamik pada waktu berjalan. Juga, perhatikan bahawa jika saya perlu menukar logik pengiraan gaji, saya boleh membuat PayAlgorithm baru dan menggunakannya untuk mengira gaji. Saya tidak perlu menukar kod sebelumnya, bukankah hebat?

Jadi mari kita lihat ia berfungsi.

Saya harap anda memahami Corak Strategi dengan baik. Kaedah terbaik untuk belajar sesuatu adalah dengan berlatih.

Sekiranya anda mempunyai pertanyaan yang berkaitan dengan Corak Strategi atau Corak lain, tinggalkan pertanyaan anda di bawah.

Nantikan posting seterusnya, di mana kita akan menemui salah satu Corak Reka Bentuk yang paling popular, Corak Kilang.

Sehingga anda boleh memuat turun permainan kod dengannya dan pastikan anda menyusun Corak Strategi di kepala anda.

Ada soalan untuk kami? Sebutkannya di bahagian komen dan kami akan menghubungi anda.

Catatan berkaitan: