2.1 Negara
Negara adalah pola desain perilaku. Ini digunakan dalam kasus-kasus ketika, selama eksekusi program, objek harus mengubah perilakunya tergantung pada statusnya.
![Negara](https://cdn.codegym.cc/images/article/0b64173f-b514-4ae1-a073-6cbb386a5716/800.jpeg)
Pola terdiri dari 3 blok:
Konteks adalah kelas yang objeknya harus mengubah perilakunya tergantung pada keadaan.
State adalah antarmuka yang harus diimplementasikan oleh masing-masing state konkret. Melalui interface ini, objek Context berinteraksi dengan state dengan mendelegasikan pemanggilan method padanya. Antarmuka harus berisi sarana umpan balik ke objek yang perilakunya akan diubah.
Untuk ini, sebuah acara digunakan (pola Penerbit - Pelanggan). Ini diperlukan untuk mengganti objek status selama eksekusi program saat terjadi peristiwa. Mungkin ada kasus di mana Konteks itu sendiri secara berkala memilih objek status untuk transisi.
ConcreteState1, ConcreteState2 - kelas keadaan beton. Harus berisi informasi tentang kondisi apa dan dalam keadaan apa objek dapat lewat dari keadaan saat ini. Misalnya, dari ConcreteState1, sebuah objek dapat menuju ke ConcreteState2 dan ConcreteState3, dan dari ConcreteState2 kembali ke ConcreteState1, dan seterusnya. Objek salah satunya harus berisi Konteks saat dibuat.
Misalnya, Anda sedang menulis game di mana karakter dapat berlari, berenang, dan terbang. Jika karakter Anda masuk ke dalam air, maka masuk akal untuk membatasi perilakunya di dalam air: sekarang dia tidak dapat menembak, tetapi dia masih memiliki beberapa tindakan: berenang ke depan, ke kanan, ke kiri, dll.
Status karakter Anda dapat dijelaskan oleh objek Status, yang memiliki metode yang dapat dipanggil dan akan melakukan sesuatu. Dan setelah karakter Anda masuk ke air, Anda tinggal mengubah referensi ke objek Status lain di dalamnya - dan statusnya berubah.
2.2 strategi
Strategi adalah pola desain perilaku untuk mendefinisikan keluarga algoritma, merangkum masing-masing, dan membuatnya dapat dipertukarkan. Ini memungkinkan Anda memilih algoritme dengan menentukan kelas yang sesuai.
Pola Strategi memungkinkan Anda mengubah algoritme yang dipilih terlepas dari objek klien yang menggunakannya.
![Strategi](https://cdn.codegym.cc/images/article/673c4c44-ec33-4d4e-860f-399abc388d8d/800.jpeg)
Pola Strategi memungkinkan Anda untuk menggunakan aturan bisnis atau algoritme yang berbeda tergantung pada konteksnya. Ini digunakan dalam kasus di mana algoritma yang berbeda harus digunakan di tempat yang sama tergantung pada keadaan sistem saat ini (atau lingkungannya).
Kekuatan:
- enkapsulasi implementasi berbagai algoritma, sistem menjadi independen dari kemungkinan perubahan aturan bisnis;
- memanggil semua algoritma dengan satu cara standar;
- tidak menggunakan sakelar dan/atau pernyataan bersyarat.
Pola ini agak mirip dengan pola Negara, tetapi di sini penekanannya bukan pada negara, tetapi pada perilaku. Katakanlah karakter dalam gim Anda dapat mengganti senjata. Kemudian saat mengganti senjata, Anda cukup mengubah referensi ke objek yang menggambarkan cara kerja senjata ini.
2.3 Metode Templat
![Metode Templat](https://cdn.codegym.cc/images/article/be4df3de-e667-4f4d-9ea7-d3b021879bb2/800.jpeg)
Kelas abstrak (kelas abstrak) - mendefinisikan operasi abstrak yang diganti di ahli waris untuk mengimplementasikan langkah-langkah algoritme; mengimplementasikan metode template yang mendefinisikan kerangka algoritma. Metode template memanggil operasi yang diganti dan operasi lain yang ditentukan dalam kelas Abstrak.
Kelas beton (kelas beton) - mengimplementasikan operasi yang diganti dengan cara yang diperlukan untuk implementasi. Kelas Beton mengasumsikan bahwa langkah-langkah invarian dari algoritme akan dilakukan di Kelas Abstrak.
Pola ini sering digunakan saat dibutuhkan:
- Penggunaan tunggal dari bagian invarian dari algoritme, meninggalkan bagian yang berubah atas kebijaksanaan ahli waris.
- Lokalisasi dan isolasi kode umum ke beberapa kelas untuk menghindari duplikasi.
- Izinkan pewaris untuk memperluas kode hanya di tempat-tempat tertentu.
Ya, pola ini menjelaskan penggunaan pasangan: kelas abstrak dan implementasinya.
2.4 Rantai Tanggung Jawab
Rantai tanggung jawab adalah pola desain perilaku yang dirancang untuk mengatur tingkat tanggung jawab dalam suatu sistem.
![Rantai tanggung jawab](https://cdn.codegym.cc/images/article/41b55822-dc67-4db3-a0e8-b467bc9f320d/800.jpeg)
Template direkomendasikan untuk digunakan dalam kondisi di mana:
- dalam sistem yang dikembangkan terdapat sekelompok objek yang dapat memproses pesan dari jenis tertentu;
- semua pesan harus diproses oleh setidaknya satu objek sistem;
- pesan dalam sistem diproses sesuai dengan skema "proses sendiri atau berikan ke yang lain", yaitu, beberapa pesan diproses pada tingkat penerimaannya, sementara yang lain diteruskan ke objek di tingkat lain.
2.5 Kenang-kenangan
Keeper (Memento) adalah pola desain perilaku yang memungkinkan Anda untuk memperbaiki dan menyimpan keadaan internal suatu objek tanpa melanggar enkapsulasi sehingga dapat dikembalikan ke keadaan ini nanti.
![Wali (Kenangan)](https://cdn.codegym.cc/images/article/9b1d2d68-74b7-427c-8d7b-cf44640cf51f/800.jpeg)
Pola Guardian digunakan saat:
- perlu untuk menyimpan snapshot dari keadaan objek (atau bagian darinya) untuk pemulihan selanjutnya;
- Antarmuka langsung untuk mendapatkan status objek memperlihatkan detail implementasi dan merusak enkapsulasi objek.