January 24, 2016

Abstract Factory

ပြီးခဲ့သော အပိုင်းဖြင့် Factory Pattern အကြောင်းကို မိတ်ဆက်ခဲ့၏။ Factory Pattern သည် Object Creation Process အား Client Program များနှင့် Decouple လုပ်နိုင်ပါသည်။ Class တစ်ခု၏ Sub Class များအား လိုအပ်ချက်အပေါ်မူတည်ပြီး Object များကို ဆောက်လုပ်သည့် အပိုင်းအား Factory Method အတွင်းတွင် Encapsulate လုပ်ပေးခဲ့ပါသည်။

Problem

သို့ရာတွင် generate လုပ်ပေးနေသော Class ၏​ Sub Class အမျိုးအစားများတိုးပွားလာသည်နှင့် အမျှ Factory Method အား ပြုပြင်ပြောင်းလည်းရန် လိုအပ်လာမြဲ ဖြစ်ပြန်သည်။ Sub Class အမျိုးအစား များလေလေ Factory Method အတွင်းရှိ if else if နှင့် switch လော့ဂျစ်များ များလာလေလေ ဖြစ်ပါလိမ့်မည်။


ကျွန်တော်တို့ရေးသားသော အပလီကေးရှင်းတစ်ခုတွင် Theme အပေါ်မူတည်ပြီး UI Component များကို ထုတ်လုပ်ပေးရန်လိုအပ်လသည် ဟု ဆိုကြပါစို့။ Theme နည်းနေပါက ကိစ္စမရှိ၊ Theme အသစ်များ ထပ်မံဖြည့်စွက်လိုပါက UIFactory Class အား ပြုပြင်ရန်လိုအပ်ပြီး Factory Method များ အတွင်း Logic များ များပြားလာမည်ဖြစ်ပါသည်။


Solution

အဆိုပါပြဿနာအား ဖြေရှင်းရန် Abstract Factory Pattern ကို အသုံးပြုနိုင်ပါသည်။
အထက်ပါပုံအတိုင်း UIFactory နေရာတွင် AbstractUIFactory class နှင့် အစားထိုးပါမည်။ ပြီးမှ Theme အလိုက် AbstractUIFactory အား Extends လုပ်ထားသော Concrete Class Factory များအား တည် ဆောက်ပါမည်။ အဆိုပါ Concrete Factory များမှ တဆင့် သက်ဆိုင်ရာ Component များ အား Generate လုပ်ပေးပါမည်။ ထိုနည်းအားဖြင့် Theme အသစ်တိုးပွါးမည် ဆိုရင်လည်း Concrete Factory များနှင့် သက်ဆိုင်ရာ Theme အလိုက် Component များအား တည်ဆောက်သွားရုံသာ ဖြစ်သည်။ UIFactory တွင် ပြုပြင်စရာလိုအပ်တော့မည် မဟုတ်ပေ။



Conclusion


Abstract Factory Pattern ကိုအသုံးပြုခြင်းအားဖြင့် Object တည်ဆောက်မှု့ကို Concrete Class များအတွင်းတွင် Encapsulate လုပ်ပေးနိုင်ပါသည်။ ထိုနည်းအားဖြင့် Client အား Object တည်ဆောက်မှု့ မှ ကင်းဝေးစေပါသည်။ 

တဖန် Client မှလဲ Product Family တစ်ခုဆီမှ အခြားတစ်ခုဆီသို့ လွယ်ကူစွာ ပြောင်းလဲ အသုံးပြုနိုင်ပါမည်။ အသုံးပြုလိုသည့် လိုအပ်ချက် အလိုက် သက်ဆိုင်ရာ ConcreteFactory များကို ပြောင်းလဲ အသုံးပြူရုံသာဖြစ်ပါမည်။


ဆက်ပါဦးမည်။ လေးစားစွာဖြင့်
မင်းလွင်

1 comment:

  1. ပံုေတြမၿမင္ရေတာ့ လိုက္စမ္းရတာ သိပ္အဆင္မေၿပဘူး ၿဖစ္ေနတယ္ခင္ဗ် ပံုေလးေတြ ၿပန္တင္ေပးပါအံုး အစ္ကို

    ReplyDelete