PHP的工厂模式

2017-11-30  本文已影响0人  打工是不可能打工的1

工厂模式

工厂模式(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');
上一篇下一篇

猜你喜欢

热点阅读