တာဝန်ဝတ္တရားပုံစံသည်အမူအကျင့်ဒီဇိုင်းပုံစံတစ်ခုဖြစ်ပြီးပရိုဆက်ဆာသည်တောင်းဆိုမှုကိုလုပ်ငန်းစဉ်ကိုလုပ်ဆောင်နိုင်သည့်အထိအပြောင်းအလဲနဲ့ကွင်းဆက်တစ်လျှောက်ဖြတ်သန်းသွားခွင့်ပြုသည်။ ဤနည်းအားဖြင့်ကွဲပြားခြားနားသောပရိုဆက်ဆာများကို decoupled နိုင်ပြီးအပြောင်းအလဲနဲ့ကွင်းဆက်ကိုပြောင်းလဲခြင်းသို့မဟုတ်ပရိုဆက်ဆာအသစ်များကိုထည့်သွင်းနိုင်သည်။
PHP တွင် Object-Oriented Programming ကိုအသုံးပြုခြင်းသည်တာဝန်ကွင်းဆက်ပုံစံကိုပိုမိုအကောင်အထည်ဖော်နိုင်သည်။ အောက်ပါတို့သည်ဤပုံစံ၏အကောင်အထည်ဖော်မှုနည်းလမ်းကိုရိုးရှင်းသောဥပမာကုဒ်မှတဆင့်ပြသလိမ့်မည်။
ပထမ ဦး စွာကွန်ကရစ်ကိုင်တွယ်သူအားလုံးအတွက်အခြေခံအကျဆုံးအတန်းအစားအတန်းအဖြစ်သတ်မှတ်ရန်လိုအပ်သည်။ လာမည့် handler setting အတွက် `setnext ()` methodnext () `methodnext (` setnext () `ကိုကိုင်တွယ်ဘို့နည်းလမ်း` လက်ကိုင် () `` လက်ကိုင် () ပါဝင်သည်။
abstract class Handler {
protected $nextHandler;
public function setNext(Handler $handler) {
$this->nextHandler = $handler;
}
abstract public function handle(Request $request);
}
နောက်တစ်ခုက Seconler's Class မှအမွေဆက်ခံပြီး `လက်ကိုင် ()` method ကိုအကောင်အထည်ဖော်ရန်တိကျသော handler အတန်းကိုဖန်တီးသည်။ ပြုပြင်ခြင်းယုတ္တိဗေဒတွင်လက်ရှိပရိုဆက်ဆာသည်တောင်းဆိုမှုကိုမလုပ်ဆောင်နိုင်ပါကနောက်လာမည့်ပရိုဆက်ဆာသို့တောင်းဆိုမှုကိုဖြတ်သန်းသည်။
class ConcreteHandler1 extends Handler {
public function handle(Request $request) {
if ($request->getType() == 'type1') {
echo "Handled by ConcreteHandler1";
} else {
if ($this->nextHandler) {
$this->nextHandler->handle($request);
} else {
echo "No handler can handle the request";
}
}
}
}
ကျွန်ုပ်တို့သည်အခြားတိကျသောပရိုဆက်ဆာအတန်းအစား `concretehandler2 ကိုဖန်တီးသည်။ နှင့် `concretehandler1`` ၏နောက် handler ကိုထား:
class ConcreteHandler2 extends Handler {
public function handle(Request $request) {
if ($request->getType() == 'type2') {
echo "Handled by ConcreteHandler2";
} else {
if ($this->nextHandler) {
$this->nextHandler->handle($request);
} else {
echo "No handler can handle the request";
}
}
}
}
တောင်းဆိုချက်အချက်အလက်များကိုပရိုဆက်ဆာသို့ကူးပြောင်းနိုင်ရန်အတွက်တောင်းဆိုထားသောဒေတာများကို encapsate လုပ်ရန် `` `` `class ကိုကျွန်ုပ်တို့လိုအပ်သည်။ ၎င်းတွင်အပြောင်းအလဲနဲ့ကွင်းဆက်တွင်ပေးပို့ရန်တောင်းဆိုခြင်း၏အချက်အလက်အမျိုးအစားပါရှိသည်။
class Request {
protected $type;
public function __construct($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
}
နောက်ဆုံးအနေဖြင့်ကျွန်ုပ်တို့သည်တာ 0 န် 0 တ္တရားကွင်းဆက်ပုံစံကိုအကောင်အထည်ဖော်နိုင်သည်။ ပထမ ဦး စွာတောင်းဆိုမှုအရာဝတ်ထုတစ်ခုကိုဖန်တီးပါ, ထို့နောက်ပရိုဆက်ဆာအရာဝတ်ထုနှစ်ခုကိုဖန်တီးပြီး၎င်းတို့အကြားအပြောင်းအလဲနဲ့ကွင်းဆက်ကိုတည်ဆောက်ပါ။ ထို့နောက်တောင်းဆိုမှုကိုပထမ handler သို့ဖြတ်ပြီးအပြောင်းအလဲနဲ့လုပ်ငန်းစဉ်ကိုစစ်ဆေးပါ။
$request = new Request('type2');
$handler1 = new ConcreteHandler1();
$handler2 = new ConcreteHandler2();
$handler1->setNext($handler2);
$handler1->handle($request);
အထက်ပါကုဒ်ကိုဖွင့်ပါ။
concretehandler2 အားဖြင့်ကိုင်တွယ်
Test Code မှတွေ့နိုင်သည်မှာတောင်းဆိုမှုအမျိုးအစားသည် Type2 အမျိုးအစားဖြစ်သည်ဟု Concretehandler2` သည်တောင်းဆိုမှုကိုကိုင်တွယ်နိုင်သည်, တောင်းဆိုမှုအမျိုးအစားသည် type1 ကို 'type1' ဖြစ်သည့်အခါ concretehandler1` သည်တောင်းဆိုမှုကိုမကိုင်တွယ်နိုင်ပါ, ထို့ကြောင့်တောင်းဆိုမှုကို `concretehandler2` 'ကိုလွှဲပြောင်းပေးပြီးနောက် handler မရှိရင်" မကိုင်တွယ်နိုင်ပါ။
တာဝန်ယူမှုပုံစံသည် Object-Oriented ပရိုဂရမ်မှတစ်ဆင့်ပြောင်းလွယ်ပြင်လွယ်ရှိသောတောင်းဆိုမှုအပြောင်းအလဲအတွက်နည်းလမ်းဖြစ်သည်။ တောင်းဆိုမှုကိုလုပ်ဆောင်သောအခါပရိုဆက်ဆာတစ်ခုစီသည်သူကိုင်တွယ်နိုင်သည့်တောင်းဆိုမှုအမျိုးအစားကိုသာဂရုစိုက်သည်။ ၎င်းကိုမလုပ်ဆောင်နိုင်ပါကတောင်းဆိုမှုကိုနောက်ပရိုဆက်ဆာသို့လွှဲပြောင်းပေးလိမ့်မည်။ ဤနည်းလမ်းသည်ပရိုဆက်ဆာတစ်ခုစီကိုထိထိရောက်ရောက်ဖြည့်ဆည်းပေးသည်။