设计模式

2020-05-03  本文已影响0人  雨后桥前

一、单例模式

主要用于 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]);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读