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'));
    ```
    
`应用中经常使用的对象创建一个中央存储器来存放这些对象`
posted @ 2021-02-22 15:04  惊风破浪的博客  阅读(3)  评论(0编辑  收藏