php几种设计模式
- 单例模式
class Signle
{
private static $instance = null;
/**
* 单例模式 保证数据库只实例化一次
* @return null
*/
public static function getInstance()
{
if (is_null(self::$instance)) {
self::$instance = new self();
}
return static::$instance;
}
public function test()
{
echo 'Singleton Test!';
}
}
- 单例模式类只能被实例化一次
- 观察者模式
- 订单创建完成后,会做各种动作比如发送email,或者改变订单状态等,原始方法是将这些操作,写在创建订单里面,随着订单创建类越来越多,这样的操作已无法满足需求快速变动
class Observer
{
//订单创建完成后,会做各种动作比如发送email,或者改变订单状态等,原始方法是将这些操作,写在创建订单里面
//随着订单创建类越来越多,这样的操作已无法满足需求快速变动
protected $observers = []; //存放容器
//观察者新增
public function addObserver($type, $observer)
{
$this->observers[$type][] = $observer;
}
//运行观察者
public function obServer($type){
if (isset($this->observers[$type])){
foreach ($this->observers[$type] as $observer) {
$a = new $observer;
$a->update($this);
}
}
}
public function create()
{
echo '购买成功';
// buy 动作
$this->obServer('buy');
}
}
调用
$ob = new Observer();
$ob->addObserver('buy','\\app\\common\\Email'); //调用发送邮件类,或者修改订单类
$ob->create();
-简单工厂模式 ,比如有Json类,xml类,我们可以通过工厂模式统一创建
class Xml{
public function buildXml(){
echo "我是xml类";
}
}
class Json
{
public function getJsonData()
{
echo "我是Json类";
}
}
class Factory
{
public static function create($class)
{
return new $class;
}
}
//运行
$res = Factory::create('\app\common\Json');
$res->getJsonData()
- 结构型-注册树模式
include 'Car.php';
class Register
{
protected static $obj = [];
const LOGGER = 'logger';
/**
* 挂载对象到全局树
* @param $alias
* @param $obj
*/
public static function set($alias, $obj)
{
self::$obj[$alias] = $obj;
}
/**
* 获取注册树对象
* @param string $name
* @return mixed
*/
public static function get($name = '')
{
return self::$obj[$name];
}
/**
* 销毁
* @param $name
*/
function __unset($name)
{
unset(self::$obj[$name]);
}
}
Register::set(Register::LOGGER,new Car());
$dog = Register::get(Register::LOGGER);
print_r($dog->create('a'));
```
`应用中经常使用的对象创建一个中央存储器来存放这些对象`