您的位置:首页 > 编程语言 > PHP开发

PHP设计模式

2018-03-06 07:44 204 查看
工厂模式 工厂方法或类生成对象,而不是直接在代码中new单例模式 使某个类仅创建一次,防止数据库的连接多次,造成资源浪费 声明非公开的成员属性,用户判断 构造方法私有化 声明静态的公有方法,来实例对象 protected $db private function __construct(){} static function getInstace(){ if(self::$db){ return self::$db; }else{ self::db=new self; return self::db; } }注册树模式 将实例化的对象存储在树上(即一个数组变量),每次使用必须在使用单例模式判断,直接调取注册树中存储的对象即可 class Register{ protect static $objects; static function set($alias,$object){ self::$objects[$alias]=$object; } static function get($alias){ return self::$object[$alias]; } function __unset(){ unset(self:$object[$alias]); } }适配器模式 可以将截然不同的函数接口封装称统一的api 实际应用举例:php的数据库三种操作封装,cache适配器 建立一个接口类,让这些不同的全部继承接口类去实现具体的方法 interface IDatabase{ function connect($host,$user,$passed,$dbname) function query($sql); function close(); } class Mysqli implements IDatabase{ protected $conn; function connect($host,$user,$passed,$dbname){ $conn=mysqli_connect($host,$user,$passed,$dbname); $this->conn=$conn; } function query($sql){ return mysqli_query($this->conn,$sql); } function close(){ mysqli_close($this->conn); } } new 命名空间/类名 调用 这里可以直接写一个工厂方法实例化,这样就只需要传参数就行了策略模式 PHP策略模式 UserStateagy.php策略的接口文件:约定策略的所有行为 FemaleUserStrategy.php实现接口的所有方法 MaleUserStragy.php实现接口的所有方法 调用 class Page{ protected $strategy; function index(){ echo “AD”; $this->strategy->showAd(); echo “<br/>”; echo “Category”; $this->straregy->showCategory() } function setStrategy(\IMooc\UserStrategy $strategy){ $this->strategy=$srategy; } }
$page=new Page(); if(isset($_GET[‘female’])){ $strategy=new  }else{ $strategy=new  } $page->setStrategy($strategy);(以策略对象为参数进行策略传递) $page->index();数据对象映射模式 数据映射对象模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作 生成一个数据对象操作表的类,使用的时候,直接new会乱,所以就使用工厂方法,但是工厂方法创建了两个对象,所以就使用注册器模式把对象注入,就只使用一个了。观察者模式 事件产生者 EventGenerator.php abstract class EventGenerator{ private $observer=array(); function addObserver(Oberver $observer){ $this->observers[]=$observer; } function notify(){ foreach($this->observers as $observer){ $observer->update(); } } } 观察者接口 interface Observer{ function update(); } 执行 class Event extends EventGenrator{ function trigger(){ echo “event”; $this->notify() } } class Observer1 implements Observer{ function update(){ echo “逻辑一”; } } $event=new Event; $event->addObserver(new Observer1); $event->trigger();原型模式:通过clone来在内存拷贝大对象,节约开销 原型模式与工厂模式作用类似,用来创建对象,先创建好一个原型对象,然后通过clone原型对象来创建新的对象,就免去了类创建时重复的初始化操作,原型模式仅适用于大对象的创建,创建一个大对象需要很大的开销,如果每次new都会消耗很大,原型模式仅需内存拷贝即可
装饰器模式 可以动态的添加修改类的功能,一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个字类继承它,并重新实现类的方法,使用装饰器模式,仅需在运行时添加个装饰器对象即可实现,可以实现最大的灵活性迭代器模式  在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素,相比传统的编程模式,迭代器模式可以隐藏遍历元素的操作 接口Iterator current()返回当前元素 key()返回当前元素的键 next()向前移动到下一个元素 rewind()返回到迭代器的第一个元素 valid()检查当前位置是否有效代理模式 数据库的读写分离 分离读操作和写操作的时候,设置个代理,里面实现获取和更新操作,然后直接实例化调用相关方法 class Proxy implements IUserProxy{ function getUserName($id){ $db=Factory::getDatabase(slave) } function setUserName($id,$name){ Factory::getDatabase(’master’) } }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: