/* * php factory pattern */ //class Factory //{ // static function crateDatabase(){ // $db=new Factory(); // return $db; // } //} // //$ db=Factory::crateDatabase();// Replace the new class by the function method . When the name and parameters of the class change, you only need to modify the createDatabase method to avoid modifying a large area of code /* * Singleton mode such as database connection can be Avoid multiple connections to the database */ class Database{ public $age = 12 ; static protected $db = null ; private function __construct () // Because the constructor is private , new { } static function getInstance (){ if ( self :: $db instanceof self ){ return self :: $db ; } else { self :: $db = new self () ; return self :: $db ; } } } // //$db=Database::getInstance();// This singleton pattern is also equivalent to the factory pattern /* * registration tree pattern */ //class Factory{ // // static function createDatabase($name){ // $db=$name::getInstance(); // return $db; // } // //} //class Register //{ // public $age=12; // protected static $objects; // static function set($alias,$object) // { // self::$objects[$alias]=$object; // } // static function get($name){ // return self::$objects[$name]; // } // function _unset(){ // // } // public function age(){ // echo $this->age; // } //} // //Register::set('db1',Factory::createDatabase('Database'));//将Database类的对象在Factory工厂中生产,并在Register这一个注册树上挂着 且命名为db1 //$db1=Register::get('db1'); //将挂在注册树上名为db1的对象 // //var_dump($db1); /* * 观察者模式 */ //观察者 interface IObserver{ function onChanged($sender,$args); } //定义可以被观察的对象接口 interface IObservable{ function addObserver($observer); } class UserList implements IObservable { //数组存放在观察者对象 private $_observers=array(); public function addCustomer($name) { // TODO: Implement addObserver() method. foreach ($this->_observers as $obs) $obs->onChanged($this,$name); } public function addObserver($observer){ $this->_observers[]=$observer; } } class UserListLogger implements IObserver { private $name; public function __construct($name) { $this->name=$name; } public function onChanged($sender, $args) { // TODO: Implement onChanged() method. echo $this->name." $args added to user list\n"; } } $ul1=new UserList(); $ul1->addObserver(new UserListLogger('zhuguan')); $ul1->addObserver(new UserListLogger('jingli'));//创建了两个观察者 当创建了新用户时 分别向这两个观察者发消息 $ul1->addCustomer('weisheng'); $ul2=new UserList(); $ul2->addObserver(new UserListLogger('zhangsan')); $ul2->addObserver(new UserListLogger('lisi'));//创建了两个观察者 当创建了新用户时 分别向这两个观察者发消息 $ul2->addCustomer('liwei'); /* * 结果: * zhuguan weisheng added to user list jingli weisheng added to user list zhangsan liwei added to user list lisi liwei added to user list */ /* * 策略模式 */ //定义接口 interface Calc{ public function getValue($num1,$num2); } //定义两个类表示2种可供选择的策略 class Add implements Calc{ public function getValue($num1, $num2) { // TODO: Implement getValue() method. echo $num1+$num2; } } class Mul implements Calc{ public function getValue($num1, $num2) { // TODO: Implement getValue() method. echo $num1*$num2; } } class CalcContext{ private $_strategy=null; public function __construct(Calc $select) { $this->_strategy=$select; } //设置策略类 public function setCalc(Calc $select){ return $this->_strategy=$select; } public function getResult($m,$n){ $this->_strategy->getValue($m,$n); } } $cal=new CalcContext(new Add());//调用Add策略 $cal->getResult(10,5);//15 $cal=new CalcContext(new Mul());//调用Mul策略 $cal->getResult(10,5);
Common design patterns in PHP
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=324730674&siteId=291194637
Recommended
Ranking