/* * php工厂模式 */ //class Factory //{ // static function crateDatabase(){ // $db=new Factory(); // return $db; // } //} // //$db=Factory::crateDatabase();//通过函数方法 替换成new class 当类的名字和参数发生改变时只需要修改createDatabase这个方法 避免了修改大面积代码 /* * 单例模式 例如数据库的连接 可以避免多次连接数据库 */ class Database{ public $age=12; static protected $db=null; private function __construct()//由于构造函数是private 所以无法直接new { } static function getInstance(){ if(self::$db instanceof self){ return self::$db; }else { self::$db = new self(); return self::$db; } } } // //$db=Database::getInstance();//这个单例模式也相当于工厂模式 /* * 注册树模式 */ //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);
PHP常见的设计模式
猜你喜欢
转载自blog.csdn.net/qq_35885307/article/details/80057063
今日推荐
周排行