11/5/2023
Observer Pattern
တစ်နေ့က conference တစ်ခုဝင် Join တော့ bro Aung Myat Moe ရေးထားတဲ့ Wuttyi multi-paradigms programming ကို show case ပြရင်းနဲ့ သူလေ့ လာခဲ့တဲ့ စာအုပ်တွေကိုကော တင်ပေးထားတယ် ဆိုလို့ ဆရာသက်ခိုင်ရဲ့ The Practical Theory Of Programming Language by Thert Khine စာအုပ်ကို ဖတ်ကြည့်ဖြစ်တယ်။ အဲ့မှာ ပါတဲ့ Observer Pattern ဆိုတာ ဘာလဲ ဆိုတာကို ကျွန်တော် ရှာကြည့် မိသလောက် ပြောပြပေးသွားပါမယ်။ Observer Pattern ရဲ့ short to the point ကဘာလဲ ဆိုတော့ “One object changes all its dependents are notified and update automatically” ဘဲ။ အောက်မှာ ပြထားတဲ့ ပုံတွေက Observer Pattern ကို Java နဲ့ Chat GPT ကို ရေးခိုင်းထားတာ။ အဲ့မှာဆိုရင် Subject နဲ့ Observer ဆိုတဲ့ interface နှစ်ခုရှိတယ်။အဲ့ထဲမှာမှ registerObserver, removeObserver,notify observer နဲ့ update ဆိုတဲ့ abstract methods တွေကို declare လုပ်ထားတယ်။ WeatherStation ဆိုတဲ့ class က နေပြီးတော့ Subject interface ကို implement လုပ်လိုက်တော့ Subject interface ထဲမှာ ရှိတဲ့ abstract methods တွေကို invoke လုပ်ဖို့လိုလာရော။ အဲ့ WeatherStation class ထဲမှာဘဲ Observer object ကို သိမ်းမယ့် ArrayList တစ်ခု ကိုကော declaration လုပ်ထားပြီးတော့ abstract methods တွေရဲ့ process အတိုင်း ArrayList ထဲကို addလုပ်တယ် , ArrayList ထဲက remove လုပ်တယ် ပြီးတော့ For each နဲ့ loop ပတ်ပြီးတော့ ArrayList ထဲမှာရှိတဲ့ Observer object တွေကို update လုပ်တယ်။ ပြီးတော့ setter တစ်ခု create လုပ်ပြီး temperature ကိုလက်ခံတယ်။ TemperatureDisplay class မှာက Temperature ကို update လုပ်ဖို့တွက် temperature ကို accept လုပ်ထားတဲ့ Observer ရဲ့ abstract method ကို invoke လုပ်ပြီးတော့ temperature ရဲ့ value ကို update လုပ်တယ် ပြီးတော့ output ကို display method နဲ့ ထုတ်ပြတယ်။ main method ပါ တဲ့ Main class မှာက ကျတော့ Object create လုပ်တယ် ပြီးတော့ set method နဲ့ value ကို parse လုပ်လိုက်တော့ display method ထဲမှာ print ထုတ်ထားတဲ့ အတိုင်း ပေါ်လာတယ်။ ဒါပါဘဲ။စာအရမ်းရှည်သွားမှာ စိုးလို့ ဒီလောက်နဲ့ဘဲ ရပ်လိုက်ပါတော့မယ်။ပိုပြီးတော့ detail ကျကျ သိချင်တယ်ဆိုရင် googling လုပ်ကြည့်ကြပါ။ ကျွန်တော်နားလည်သလောက်လေး အတိုချုံ့ပြောပြသွားတာဖြစ်လို့ အမှားတွေပါသွားရင်လဲ နားလည်ပေးကြပါေနာ်။ ဒါကတော့ wuttyi programming link ပါ https://wuttyi.vercel.app/




