January 10, 2016

Factory Method

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

Class များသည် Object များကို တည်ဆောက်ရန် ရေးသားရသည်ဟု လည်းပြောနိုင်ပါသည်။ ထို့အပြင် Class တစ်ခုမှ အနေအထား အမျိုးမျိုးနှင့် Object အမျိုးမျိုးကို တည်ဆောက်နိုင်ရန် Constructor များကို ပုံစံအမျိုးမျိုးဖြင့် ထားရှိလေ့ရှိပါသည်။ မိမိရေးသားထားသည့် Class ဆိုပါက မိမိလိုအပ်သော Object ကို အလွယ်တကူတည် ဆောက်နိုင်မည် ဖြစ်သော်လည်း အခြားသူတစ်ယောက်က ရေးသားထားသော Class ဆိုပါက မည်သည့် Constructor ကို အသုံးပြုရမည်ဆိုသည်မှာ စိတ်ရှုပ်စရာပင်ဖြစ်သည်။

ထိုအခါမျိုတွင် Method တစ်ခုကို ခေါ်ဆိုပြီး လိုအပ်သော Object ကို ရရှိမည် ဆိုပါက အစဉ်ပြေမည် ဖြစ်သည်။


Problem


အထက်ပါ Class Diagram အတွင်းတွင် Car Abstract Class အား Inheritance လုပ်ထားသော Car အမျိုးအစား သုံးမျိုးရှိပါသည်။ တဖန် CarSimulator မှ Car Object အား အသုံးပြုနေပါသည်။

CarSimulator အတွင်းမှ TruckCar Object ကို အသုံးပြုလိုပါက Car truck = new TruckCar() ဟု Object ကို တည်ဆောက်ရမည် ဖြစ်သည်။ ဆိုလိုသည်မှာ လိုအပ်သော Object အလိုက် သက်ဆိုင်ရာ Sub Class များနှင့် Object ဆောက်ရမည် ဖြစ်သည်။

အကြောင်းတစ်ခုခုကြောင့် Sub Class မျာ၏ Constructor ကို ပြုပြင်ရန်ဖြစ်လာသည့်အခါ၊ CarSimulator တွင် အကျိုးသက်ရောက်မှု့များကို ဖြစ်ပေါ်စေမည် ဖြစ်သည်။ CarSimulator ကဲ့သို့ Client Program များ အများအပြားရှိမည် ဆိုပါက ပြုပြင်ရမည်မှာ အတော်လေးကို အလုပ်ရှုပ်သွားမည် ဖြစ်ပါသည်။


Solution


ထိုအခါမျိုတွင် အသုံးဝင်သည်မှာ Factory Method Pattern ဖြစ်သည်။ Car Object များကို ထုတ်လုပ်ပေးနိုင်သော Factory တစ်ခုရှိမည် ဆိုပါက အသုံးပြုရလည်းလွယ်ကူမည်။ တဖန် Sub Class များ၏ Object တည်ဆောက်ရာတွင် ပြုပြင်ပြောင်းလည်းမှု့ ဖြစ်ပေါ်မည် ဆိုလည်း အကျိုးသက်ရောက်မည် ဖြစ်သည်။

အထက်ပါ Class Diagram အတွင်းတွင် CarFactory Class တွင် generate method ကို ပြင်ဆင်ထားပြီး Argument အဖြစ်ရယူထားသော String Parameter အလိုက် သက်ဆိုင်ရာ Sub Class Object များကို တည်ဆောက်ပြီး Car Object အဖြစ် ပြန်ပေးမည် ဖြစ်ပါသည်။

ထိုကြောင့် CarSimulator သည် Car Object ကို ရယူလိုပါက CarFactory ၏​ generate method ကို လိုအပ်သော  Parameter ကို ပေးပြီး ခေါ်ဆိုရုံနှင့် ရရှိမည် ဖြစ်သည်။ Car ကို မည်သို့ တည်ဆောက်ရမည် ဆိုသည်ကို Client Program အတွင်းတွင် ရေးသားရန် လိုအပ်တော့မည် မဟုတ်ပါ။

Factory Pattern ကို အသုံးပြုခြင်းအားဖြင့် Client များအတွင်း Dependency Object များကို တည်ဆောက်ရန် မလိုအပ်တော့ပဲ ၎င်းတို့အကြားရှိ Coupling ကို လျော့ချနိုင်ပါသည်။ ထိုကြောင့် Service Class များကို လွယ်ကူစွာ Extends ပြုလုပ်နိုင်မည် ဖြစ်ပါသည်။

  

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

No comments:

Post a Comment