PHP编程之-设计模式简单实例

PHPABC PHP开发 1,512 次浏览 , 没有评论

 

【单例模式】

 /*   * @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);      }  }



 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Go