2.1 Devlet
Durum davranışsal bir tasarım modelidir. Programın yürütülmesi sırasında nesnenin durumuna bağlı olarak davranışını değiştirmesi gereken durumlarda kullanılır.
![Durum](https://cdn.codegym.cc/images/article/0b64173f-b514-4ae1-a073-6cbb386a5716/800.jpeg)
Desen 3 bloktan oluşur:
Bağlam, nesnelerinin duruma bağlı olarak davranışlarını değiştirmesi gereken bir sınıftır.
Durum, somut durumların her birinin uygulaması gereken arayüzdür. Bu arabirim aracılığıyla, Bağlam nesnesi, ona yöntem çağrıları devrederek durumla etkileşime girer. Arayüz, davranışı değiştirilecek nesneye geri bildirim için araçlar içermelidir.
Bunun için bir olay kullanılır (örnek Yayıncı - Abone). Bu, olaylar gerçekleştiğinde programın yürütülmesi sırasında durum nesnesini değiştirmek için gereklidir. Bağlamın kendisinin bir geçiş için durum nesnesini periyodik olarak yokladığı durumlar olabilir.
ConcreteState1, ConcreteState2 - somut durum sınıfları. Nesnenin mevcut durumdan hangi koşullar altında ve hangi durumlarda geçebileceği hakkında bilgi içermelidir. Örneğin, bir nesne ConcreteState1'den ConcreteState2 ve ConcreteState3'e gidebilir ve ConcreteState2'den tekrar ConcreteState1'e vb. gidebilir. Bunlardan birinin nesnesi, oluşturulduğunda Bağlamı içermelidir.
Örneğin bir karakterin koşabildiği, yüzebildiği ve uçabildiği bir oyun yazıyorsunuz. Karakteriniz suya girdiyse, sudaki davranışını sınırlamak mantıklıdır: artık ateş edemez, ancak yine de bazı eylemleri vardır: ileri, sağa, sola, vb.
Karakterinizin durumu, çağrılabilen ve bir şeyler yapacak yöntemleri olan bir State nesnesi tarafından tanımlanabilir. Ve karakteriniz suya girdikten sonra, referansı onun içindeki başka bir State nesnesine değiştirirsiniz - ve o da durumunu değiştirir.
2.2 strateji
Strateji, bir algoritma ailesini tanımlayan, her birini içine alan ve birbirinin yerine kullanılabilir hale getiren davranışsal bir tasarım modelidir. Bu, uygun sınıfı tanımlayarak bir algoritma seçmenize olanak tanır.
Strateji modeli, onu kullanan istemci nesnelerinden bağımsız olarak seçilen algoritmayı değiştirmenize olanak tanır.
![Strateji](https://cdn.codegym.cc/images/article/673c4c44-ec33-4d4e-860f-399abc388d8d/800.jpeg)
Strateji modeli, bağlama bağlı olarak farklı iş kuralları veya algoritmalar kullanmanıza olanak tanır. Sistemin (veya ortamının) mevcut durumuna bağlı olarak aynı yerde farklı algoritmaların kullanılması gereken durumlarda kullanılır.
Güçlü:
- çeşitli algoritmaların uygulanmasının kapsüllenmesi, sistem iş kurallarındaki olası değişikliklerden bağımsız hale gelir;
- tüm algoritmaları tek bir standart şekilde çağırmak;
- anahtarlar ve/veya koşullu ifadeler kullanmamak.
Bu model, Durum modeline biraz benzer, ancak burada vurgu durum üzerinde değil, davranış üzerindedir. Diyelim ki oyununuzdaki bir karakter silah değiştirebiliyor. Ardından, silahları değiştirirken, bu silahın nasıl çalıştığını açıklayan nesneye yapılan referansı değiştirebilirsiniz.
2.3 Şablon Yöntemi
![Şablon Yöntemi](https://cdn.codegym.cc/images/article/be4df3de-e667-4f4d-9ea7-d3b021879bb2/800.jpeg)
Soyut sınıf (soyut sınıf) - algoritmanın adımlarını uygulamak için mirasçılarda değiştirilen soyut işlemleri tanımlar; algoritmanın iskeletini tanımlayan bir şablon yöntemi uygular. Template yöntemi, Abstract sınıfında tanımlanan değiştirilen ve diğer işlemleri çağırır.
Somut sınıf (beton sınıf) - değiştirilen işlemleri uygulama için gerekli şekilde uygular. Concrete sınıfı, algoritmanın değişmez adımlarının AbstractClass içinde gerçekleştirileceğini varsayar.
Bu model genellikle gerektiğinde kullanılır:
- Algoritmanın değişmez kısmının tek kullanımı, değişen kısmın mirasçıların takdirine bırakılması.
- Yinelemeyi önlemek için birkaç sınıf için ortak olan kodun yerelleştirilmesi ve izolasyonu.
- Mirasçıların kodu yalnızca belirli yerlerde genişletmesine izin ver.
Evet, bu model bir çiftin kullanımını açıklar: soyut bir sınıf ve onun uygulanması.
2.4 Sorumluluk Zinciri
Sorumluluk zinciri , bir sistemdeki sorumluluk düzeylerini düzenlemek için tasarlanmış davranışsal bir tasarım modelidir.
![sorumluluk zinciri](https://cdn.codegym.cc/images/article/41b55822-dc67-4db3-a0e8-b467bc9f320d/800.jpeg)
Şablonun aşağıdaki durumlarda kullanılması önerilir:
- geliştirilen sistemde, belirli bir türdeki mesajları işleyebilen bir grup nesne vardır;
- tüm mesajlar en az bir sistem nesnesi tarafından işlenmelidir;
- sistemdeki mesajlar “kendin işle veya başkasına ilet” şemasına göre işlenir, yani bazı mesajlar alındığı seviyede işlenirken, diğerleri başka seviyedeki nesnelere iletilir.
2.5 Hatıra
Keeper (Memento), bir nesnenin iç durumunu, daha sonra bu duruma geri yüklenebilmesi için kapsüllemeyi ihlal etmeden düzeltmenize ve kaydetmenize olanak tanıyan davranışsal bir tasarım modelidir.
![Koruyucu (Hatıra)](https://cdn.codegym.cc/images/article/9b1d2d68-74b7-427c-8d7b-cf44640cf51f/800.jpeg)
Koruyucu kalıbı şu durumlarda kullanılır:
- sonraki restorasyon için nesnenin (veya bir kısmının) durumunun bir anlık görüntüsünü kaydetmek gerekir;
- Bir nesnenin durumunu almak için doğrudan arabirim, uygulama ayrıntılarını ortaya çıkarır ve nesne kapsüllemesini bozar.