工厂模式
工厂模式(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');
网友评论