Mifumo ya Muundo wa Ubunifu: Facade, Flyweight, na Proxy
Mifumo ya muundo wa ubunifu inakusaidia kupanga madarasa (classes) na vitu (objects).
Leo tunajadili mifumo mitatu ya mwisho ili kukamilisha mkoba wako wa zana.
1. Mfumo wa Facade Facade inarahisisha mifumo tata. Inatoa kiolesura (interface) kimoja rahisi kwa kundi la madarasa yaliyochangamana.
Fikiria sinema. Ili kutazama filamu, unahitaji kupunguza mwanga, kuwasha projekta, na kufungua mapazia. Badala ya kuita mifumo mitano tofauti, unaita njia (method) moja: theater.watch_movie().
Tumia unapotaka:
- Unataka kurahisisha mfumo mdogo (subsystem) tata.
- Unahitaji kiingilio kimoja (single entry point) kwa API kubwa.
- Unataka kutenganisha wateja (clients) kutoka kwa mantiki ya ndani (internal logic).
2. Mfumo wa Flyweight Flyweight huokoa kumbukumbu (memory). Inafanya kazi unapokuwa na maelfu ya vitu vinavyofanana.
Badala ya kuhifadhi kila maelezo katika kila kitu, unagawa data. Unahifadhi data zinazoshirikiana na zisizobadilika (intrinsic state) mahali pamoja. Unahifadhi data za kipekee (extrinsic state) kando.
Tumia unapotaka:
- Matumizi ya kumbukumbu ni tatizo halisi.
- Unasimamia mamilioni ya vitu vinavyofanana, kama herufi kwenye programu ya maandishi (text editor) au chembechembe (particles) kwenye mchezo.
- Unataka kutumia "object pooling" ili kuboresha utendaji.
3. Mfumo wa Proxy Proxy hufanya kazi kama mwakilishi wa kitu kingine. Inakaa kati ya mteja (client) na kitu halisi ili kudhibiti ufikiaji.
Proxy inaweza:
- Lazy load: Pakia picha nzito tu wakati mtumiaji anapozibonyeza.
- Control access: Angalia ikiwa mtumiaji ana ruhusa ya kufuta kanzi data (database).
- Log activity: Fuatilia nani anatumia huduma fulani.
- Cache results: Rudisha data zilizohifadhiwa badala ya kuendesha mantiki inayochukua muda mrefu/gharama kubwa.
Tumia unapotaka:
- Unahitaji kuchelewesha shughuli zinazochukua muda mrefu/gharama kubwa.
- Lazima ulinzie huduma nyeti.
- Unataka kuongeza ufuatiliaji (logging) au usalama bila kubadilisha darasa la asili.
Jedwali la Muhtasari
• Adapter: Inafanya mifumo isiyoendana kufanya kazi pamoja. • Bridge: Inatenganisha dhana (abstraction) na utekelezaji (implementation). • Composite: Inajenga miundo ya mti (tree structures). • Decorator: Inaongeza tabia bila kubadilisha madarasa. • Facade: Inarahisisha mifumo midogo tata. • Flyweight: Inashirikisha data ili kuokoa kumbukumbu. • Proxy: Inadhibiti ufikiaji wa vitu.
Kanuni ya Dhahabu: Tumia mifumo hii kufanya kodi iwe rahisi kudhibiti (maintainable). Usitumie tu ili kujionyesha.
Kinachofuata, tunaanza mfululizo wa Mifumo ya Ubunifu ya Tabia (Behavioral Design Patterns).