Friday, August 21, 2009

Хонхыг жингэнүүлмээр байвал зүгээр л жингэнүүлэх хэрэгтэй

Он гарснаас хойш програмчлалын нэгэн хэсгийн их нухацтайгаар бодох болсон юм. Энэ нь ямар нэгэн зүйл програмчилж байхад ямар нэгэн тохиолдолд хэзээ ч ажиллахгүй гэдгийг нь мэдсээр байж түүнийг заавал шалгах хэрэгтэй болдог(if,switch бичих хэрэгтэй). Үүнийг зохицуулахын тулд runtime явцдаа өөрийнхөө кодыг RAM-н дээр өөрчилдөг зарим жижигхэн кодуудыг ажиглаж үзэв. Энэ тухайгаа GURU багшдаа хэлэхэд "Наадах чинь боломжтой, гэхдээ үүнийг сонирхвол чи хэзээ ч амжилтанд хүрэхгүй" гэж байсан юм. Намайг буруу ойлгосон байж болох ч би өөрийнхөө хариултыг долоо хоногийн өмнө л оллоо. Сонирхуулъя:
За мессенжерийн нэг программ бичиж байлаа гэж бодъё. Тэгсэн хэн нэг нь мессенжерт орж ирээд buzz хийх үед нь 2 төрлийн notification тохиргооноос хамаарч хийдэг байг.
1. Дуут дохио өгөх
2. Панел дээр жижигхэн мессеж болгож харуулах, нөхцөл ийм байна.
За би хариултаа олоогүй байсан бол яаж шийдэх байснаа харуулъя:

void onBuzz() {
switch(settings.buzzType) {
case makeSound: {
Device.makeSound();
break;
}
case showMessage: {
Panel.showMessage();
break;
}
default: {
throw new SomeException();
}
}
}
Аа харин хариултаа олсныхоо дараа:
abstract class Buzzer {
abstract void buzz();
}
class SoundBuzzer extends Buzzer {
void buzz() {
Device.makeSound();
}
}
class MessageBuzzer extends Buzzer {
void buzz() {
Panel.showMessage();
}
}
тэгээд программ эхлэх үед нь:
Buzzer buzzMaster=new SoundBuzzer();
buzz хийх үед ажиллах функц маань ийм болж хувирна.
void onBuzz() {
buzzMaster.buzz();
}
За ингээд бичиглэл хэмнээгүй ч ажиллах процессийн хувьд нэг switch-г авч хаяад шууд элдэв нэмэлтгүйгээр ажиллуулдаг болгочихлоо. Гоё биш гэж үү?,
Тэгвэл одоо яаж Settings-ээ сольж MessageBuzz болгох уу?
it's easy:
buzzMaster=new MessageBuzzer();

No comments:

Post a Comment