一、单例模式
主要用于 MYSQL的操作,确保一个PHP生命周期只产生一个实例; 三私一公。私有构造方法,防止外部程序实例化对象、私有__clone()方法,防止克隆对象、私有静态属性
class Instance
{
private static $instance;
public $a = 11;
private function __construct()
{
$this->a--;
echo $this->a;
}
public static function getInstance()
{
if (!self::$instance instanceof self) {
self::$instance = new self();
}
return self::$instance;
}
private function __clone()
{
}
}
Instance::getInstance();
Instance::getInstance();
二、工厂模式
使用场景:通过传递类名和参数 来实现类的实例化,避免在所有使用到该类的地方都做修改
/**定义一个 支付接口
* Date: 2020-04-27 15:05
* Author: sunqiaoyu
* Interface: Pay
*/
interface Pay{
public function payPlatform();
}
/**阿里支付方式的实现
* Date: 2020-04-27 15:06
* Author: sunqiaoyu
* Class: AliPay
*/
class AliPay implements Pay{
public function payPlatform()
{
echo "阿里支付";
}
}
/**微信支付方式的实现
* Date: 2020-04-27 15:07
* Author: sunqiaoyu
* Class: WeixinPay
*/
class WeixinPay implements Pay{
public function payPlatform()
{
echo "微信支付";
}
}
/**工厂类
* Date: 2020-04-27 15:08
* Author: sunqiaoyu
* Class: Factory
*/
class Factory{
public static function create($class){
return new $class();
}
}
$pay = Factory::create("WeixinPay");
$pay->payPlatform();
三、观察者模式
/**
* 1:观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新。
* 2:场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理的逻辑。
* 当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码。
* 3:观察者模式实现了低耦合,非侵入式的通知与更新机制。
* Date: 2020-04-27 15:51
* Author: sunqiaoyu
* Class: EventGenerator
*/
abstract class EventGenerator
{
private $observers = array ();
public function addObserver($observer)
{
$this->observers[] = $observer;
}
public function notify()
{
foreach ($this->observers as $observer) {
$observer->update();
}
}
}
/**定义一个观察者接口
* Date: 2020-04-27 15:45
* Author: sunqiaoyu
* Interface: Observer
*/
interface Observer
{
public function update();
}
//观察者搜集和触发
class Event extends EventGenerator
{
function trigger()
{
echo "Event" . PHP_EOL;
}
}
//被观察者1号
class beObserver1 implements Observer
{
public function update()
{
echo "被观察者1号" . PHP_EOL;
}
}
//被观察者2号
class beObserver2 implements Observer
{
public function update()
{
echo "被观察者2号" . PHP_EOL;
}
}
$event = new Event();
$event->addObserver(new beObserver1());
$event->addObserver(new beObserver2());
$event->trigger();
$event->notify();
四、适配器模式
适配器模式:将各种截然不同的函数接口封装成统一的API。
* PHP中的数据库操作有MySQL,MySQLi,PDO三种,可以用适配器模式统一成一致,
* 使不同的数据库操作,统一成一样的API。类似的场景还有cache适配器,
* 可以将memcache,redis,file,apc等不同的缓存函数,统一成一致。
* 首先定义一个接口(有几个方法,以及相应的参数)。
* 然后,有几种不同的情况,就写几个类实现该接口。将完成相似功能的函数,统一成一致的方法
五、注册模式
/**注册模式
* 解决全局共享和对象交换,将已经创建好的对象挂在到
* 某个全局可以使用的数组上,在需要使用的时候可以直接去取
* Date: 2020-04-27 15:18
* Author: sunqiaoyu
* Class: Register
*/
class Register{
protected static $objects;
//挂载
public function set($alias,$object){
self::$objects[$alias] = $object;
}
//获取
public function get($name){
return self::$objects[$name];
}
//删除
public function _unset($name){
unset(self::$objects[$name]);
}
}
网友评论