使用场景:
1、项目中多处new同一个对象,当new的这个对象名称发生改变的时候需要在所有的地方进行修改,增加代码维护成本;
2、一个项目需要连接多种数据库Mysql、Oracle、MongoDB、Redeis等
代码示例:
案例1-连接不同数据库:
<?php
interface DB {
public function parseDsn();
}
class Mysql implements DB {
public function parseDsn() {
echo 'Mysql数据库';
}
}
class Oracle implements DB {
public function parseDsn() {
echo 'Oracle数据库';
}
}
class MongoDb implements DB {
public function parseDsn() {
echo 'MongoDb数据库';
}
}
class DbConnectFactory {
static $db = NULL; // 存储对象的值
public static function getConnect(DB $type) { // DB是类型约束
self::$db = new $type(); // 写活实例化的对象
return self::$db;
}
}
$dbConnect = new DbConnectFactory();
$connect = $dbConnect -> getConnect($type = 'Mysql');
var_dump($connect -> parseDsn());exit();
理解:
工厂模式实际上就是选择性运用实例化对象,正所谓高内聚,低耦合。