美文网首页
PHP的工厂模式

PHP的工厂模式

作者: 打工是不可能打工的1 | 来源:发表于2017-11-30 21:02 被阅读0次

    工厂模式

    工厂模式(Factory Pattern)是软件工程中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的方式,工厂模式有下面几个好处:
    1、我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
    2、避免你辛苦的准备构造方法的参数
    3、将对象的创建统一起来便于维护和整体把控,对扩展开放,对修改封闭
    4、把初始化实例时的工作放到工厂里进行,使代码更容易维护
    例如你的项目使用了多种数据库,mongodb、redis、memcached,你可以把这些数据库的初始化工作放在数据库工厂中完成,这样加入日后你这些数据库的命名空间或类名发生改变,你不必找到每一处new这个数据库的地方一一修改。php代码如下:

    <?php
    namespace App\Library\Factory;
    class Redis
    {
        private $redis;
        public function __construct()
        {
            $this->redis = new \Redis();
            $this->redis->connect('127.0.0.1',6380);
            $this->redis->auth('123456');
        }
    
        public function getRedisObj(){
            return $this->redis;
        }
    }
    
    class Memcached
    {
    
        private $memcached;
        public function __construct()
        {
            $this->memcached = new \Memcached;
            $this->memcached->addServer('127.0.0.1',11211);
            $this->memcached->setOption(\Memcached::OPT_COMPRESSION, false);
        }
    
        public function getMemcachedObj(){
            return $this->memcached;
        }
    
    }
    
    
    class Mongodb
    {
        private $mongodb;
        public function __construct()
        {
            $this->mongodb = new \MongoClient();
        }
    
        public function getMongodbObj(){
            return $this->mongodb;
        }
    }
    

    创建数据库工厂,生成基于给定信息的实体类的对象。

    class DbFactory
    {
        public function __construct()
        {
        }
    
        public function getDB($name){
            if ($name == 'redis'){
                $redis = new Redis();
                return $redis->getRedisObj();
            }elseif($name == 'memcached'){
                $memcached = new Memcached();
                return $memcached->getMemcachedObj();
            }elseif ($name == 'mongodb'){
                $mongodb =  new Mongodb();
                return $mongodb->getMongodbObj();
            }else{
                return null;
            }
        }
    
    }
    

    通过传递类型信息来获取实体类的对象

    $DbFactory = new DbFactory();
    $redis = $DbFactory->getDB('redis');
    

    相关文章

      网友评论

          本文标题:PHP的工厂模式

          本文链接:https://www.haomeiwen.com/subject/vejbbxtx.html