August 24, 2016

Singleton Pattern

Student Registration ကို ပြုလုပ်သော အပလီတစ်ခုတွင် Student များကို ထိမ်းသိမ်းပေးထားသော StudentRepository Class ကို အသုံးပြုပြီး Student များအား Memory ပေါ်တွင် ထားရှိသည်ဟု ဆိုကြပါစို့။

အဆိုပါ StudentRepository အား StudentRegistView နှင့် StudentListView တို့တွင် အသုံးပြရန်လိုအပ်ပါသည်။ ထိုအခါမျိုးတွင် View တိုင်းတွင် StudentRepository Class အား အသီးသီး Object ဆောက်နေမည် ဆိုပါက StudentRegistView နှင့် StudentListView တို့တွင် သုံးနေသော Object တို့မှာ တူညီမည် မဟုတ်တော့ပေ။ ထို့ကြောင့် StudentRegistView တွေ Register လုပ်လိုက်သော Student Object အား StudentListView တွင် တွေ့နိုင်မည် မဟုတ်တော့ပေ။


ထိုသို့ဖြစ်ရခြင်းမှာ StudentRepository Object ကို new ခေါ်တိုင်း Object ဆောက်ခွင့်ရှိနေသောကြောင့် ဖြစ်ပါသည်။ ထိုအခါမျိုးတွင် Application တစ်ခုလုံးတွင် StudentRepository Object အား တစ်ခုထဲသာ ရှိအောင် ဆောင်ရွက်ထားဖို့လိုအပ်ပါသည်။

ထိုအခါမျိုးတွင် အသုံးဝင်သည်က Singleton Design Pattern ဖြစ်ပါသည်။ Singleton Design Pattern သည် Application တစ်ခုလုံးတွင် Object တစ်ခုသာ ထားရှိလိုသည့်အခါ မျိုးတွင် အကူအညီပေးနိုင်သော Design Pattern ဖြစ်ပါသည်။

Java ဘာသာရပ်တွင် အဓိကအားဖြင့် Singleton ဖြစ်အောင် ရေးသားပုံရေးသားနည်း ၂ မျိုးရှိနိုင်ပါသည်။ ပထမနည်းမှာ Java Object အား တစ်ခုထဲရှိအောင် ဆောင်ရွက်သောနည်းဖြစ်ပြီး ဒုတိယနည်းမှာ နဂိုကထဲက တစ်ခုထဲသာရှိသော enum type ကို အသုံးပြသောနည်း တို့ဖြစ်ကြသည်။


Making Singleton Object


အဓိက ပြဿနာမှာ new ခေါ်တိုင်း Object ဆောက်လို့ရနေသောကြောင့် ဖြစ်သည်။ ထို့ကြောင့် Constructor အား private ဟု ပေးလိုက်ပါက အခြားသော Class များ အတွင်းမှ new ခေါ်ပြီး Object ဆောက်နိုင်တော့မည် မဟုတ်ပေ။
ထို့နောက်တွင် Memory ပေါ်တွင် တစ်ခုထဲရှိအောင် Static Variable ကို အသုံးပြုနိုင်ပါသည်။

ထိုသို့ပြုလုပ်ပါက ထို Object အား New ခေါ်တိုင်း Create လုပ်မရတော့ပဲ တစ်ခုထဲသာရှိသော Static Object ကို ရရှိမည် ဖြစ်ပါသည်။ အပြင်ကလိုချင်တိုင်း တစ်ခုထဲသာရှိသော Object ကို ပြန်ပေးမည်ဆိုပါက အထက်ပါ ပြဿနာကို ဖြေရှင်းနိုင်မည် ဖြစ်သည်။



အထက်တွင် ဖေါ်ပြထားသည့်အတိုင်း INSTANCE Object အား static variable အဖြစ်ထားရှိသောကြောင့် Memory ပေါ်တွင်တစ်ခုထဲသာရှိသော Object ဖြစ်နေပါမည်။ တဖန် Constructor ကို လဲ private အဖြစ်ပြောင်းထားသောကြောင့် Object ကို လိုအပ်သလို Create လုပ်လို့ရမှာ မဟုတ်တော့ပါ။

getInstance method ကို ခေါ်ဆိုပါက တစ်ခုထဲသာရှိသော INSTANCE ကို ပြန်ပေးမည် ဖြစ်သောကြောင့် တစ်ခုထဲသော Object ကို ရရှိမည် ဖြစ်ပါသည်။


Using enum type


Java SE 5 တွင် စတင် အသုံးပြုလာနိုင်ခဲ့သော Enum Type များသည် သဘာဝအရ Static Entity များ ဖြစ်ကြသည်။ ထို့ကြောင့် enum type များကို အသုံးပြုခြင်းအားဖြင့်လဲ Memory ပေါ်တွင် တစ်ခုထဲသာရှိသော Singleton Object များကို ရရှိမည် ဖြစ်ပါသည်။



No comments:

Post a Comment