php编程模式,PHP编程之-设计模式简单实例
【單例模式】
/* ?*?@singleton ?*?*/ abstract?class??SingletonClass{ ????static?private?$obj; ????public?function?init(){} ????static?public?function?getInstance(){} } class?MyInstanceClass?extends??SingletonClass{ ????static?private?$obj; ????public?static?function?getInstance(){ ????????if(!(self::$obj?instanceof?self)){ ????????????self::$obj?=?new?self(); ????????} ????????return?self::$obj; ????} ????public?function?init(){ ????????echo?"1、我是單例模式/n"; ? ????} ????private?function?__construct(){ ????????return?false; ????} ????private?function?__wakeup(){ ????????return?false; ????} } ?? MyInstanceClass::getInstance()->init();
【組合模式】
/* ?*?@composite ?*?*/?? class?XmlClass{ ????private?$nodesArray?=?array(); ????private?$name?=?"我是葉子節點/n"; ????private?$isNode?=?true; ????public?function?__construct(){ ?? ????} ????public?function?acceptNodes($array){ ????????foreach($array?as?$key=>$value){ ????????????array_push($this->nodesArray,$value); ????????} ????????$this->name?=?"我是父節點/n"; ????????$this->isNode?=?false; ????} ????public?function?getNodes(){ ????????if($this->isNode?===?true){ ????????????return?false; ????????}else{ ????????????return?$this->nodesArray; ????????} ????} ????public?function?getName(){ ????????print_r($this->name); ????} ????public?function?fn1(){ ?? ????} ????public?function?printMyself(){ ????????$this->getName(); ????????if($this->isNode?===?false){ ???????????$tempArray?=?$this->getNodes(); ????????????foreach($tempArray?as?$key=>$value){ ????????????????$value->printMyself(); ????????????} ????????} ????} } ? $obj1?=?new?XmlClass(); $obj2?=?new?XmlClass(); $sup_obj?=?new?XmlClass(); $sup_obj->acceptNodes(array($obj1,$obj2)); $sup_obj->printMyself();
【裝飾模式】
/* ?*?@decorator【裝飾模式】 ?*?*/?? class?A{ ????public?$name?=?"JianxunLiu/n"; } interface?item1Interface{ ????public?function?getName(); } class?DecoratorClass?implements?item1Interface{ ????private?$obj; ????public?function?__construct(A?$obj){ ??????$this->obj?=?$obj; ????} ????public?function?getName(){ ????????print_r($this->obj->name); ????} } ?? $obj?=?new?A(); $decoratorObj?=?new?DecoratorClass($obj); $decoratorObj->getName();
【外觀模式】
/* ?*?@Facade【外觀模式】 ?*?*/ $obj?=?new?myFacade(array('name'=>'jianxun','sex'=>'man')); $obj->getName(); $obj->getSex(); ?? class?myFacade{ ????private?$name; ????private?$sex; ????public?function?__construct($array){ ??????$this->name?=?$array['name']; ??????$this->sex?=?$array['sex']; ????} ????public?function?getName(){ ????????print_r($this->name); ????} ????public?function?getSex(){ ????????print_r($this->sex); ????} }
【策略模式】
/* ?*?@strategy ?*?*/?? class?MyClass1{ ????public?function?behaviorFn(){ ????????echo?"我會飛/n"; ????} } ?? class?MyStrategy{ ????private?$obj; ????public?function?__construct(MyClass1?$obj){ ????????$this->obj?=?$obj; ????} ????public?function?behaviorFn(){ ????????$this->obj->behaviorFn(); ????} } ?? $obj?=?new?MyStrategy(new?MyClass1()); $obj->behaviorFn();
【責任鏈模式】
/* ?*?@responsibility? ?*?*/? class?EricOuter{ ????private?$obj; ????public?function?__construct(EricInner?$obj){ ????????$this->obj?=?$obj; ????} ????public?function?say(){ ????????echo?"我會說/n"; ????} ????public?function?__call($name,$args){ ????????$this->obj->$name(); ????} } class?EricInner{ ????public?function?run(){ ????????echo?"我會跑/n"; ????} } $obj?=?new?EricOuter(new?EricInner()); $obj->say(); $obj->run();
【觀察者模式】
/* ?*?@observer【觀察者模式】 ?*?*/?? class?Observer{ ????private?$eventArray?=?array(); ????public?function?addEvent(Event?$obj){ ????????array_push($this->eventArray,$obj); ????} ????public?function?trigger(){ ????????foreach($this->eventArray?as?$key=>$value){ ????????????$value->handler(); ????????} ????} } abstract?class?Event{ ????abstract?public?function?handler(); }? class?Event1?extends?Event{ ????public?function?handler(){ ????????echo?"event1/n"; ????} } class?Event2?extends?Event{ ????public?function?handler(){ ????????echo?"event2/n"; ????} }?? class?Event3?extends?Event{ ????public?function?handler(){ ????????echo?"event3/n"; ????} }?? ?? $obj?=?new?Observer(); $event1?=?new?Event1(); $event2?=?new?Event2(); $event3?=?new?Event3(); $obj->addEvent($event1); $obj->addEvent($event2); $obj->addEvent($event3); $obj->trigger();
【命令行模式】
/* ?*?@?command ?*?*/? $obj?=?new?CommandObj(); $obj->say("Right"); ?? class?CommandObj{ ????public?function?say($str){ ????????echo?sprintf("hello?Mr.?%s",$str); ????} }
總結
以上是生活随笔為你收集整理的php编程模式,PHP编程之-设计模式简单实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ”语义分割”中的“语义”
- 下一篇: sparse double型矩阵转为fu