二、工厂模式
一、简单工厂
通过传不同参数,根据参数实例化出不同的对象实例。
但是如果新增了类,需要修改Factory
<?php
/**
* 简单工厂模式
* @author hhcycj
*
*/
interface db{
public function conn();
}
/**
*
* @author hhcycj
*
*/
class Mysql implements db{
public function conn(){
echo '连接上mysql';
}
}
/**
*
* @author hhcycj
*
*/
class Sqlite implements db{
public function conn(){
echo '连接上sqlite';
}
}
class Factory{
public static function createDB($type){
if ($type == 'mysql') {
return new Mysql();
}else if ($type == 'sqlite') {
return new Sqlite();
}else{
throw new Exception('Error db type', 1);
}
}
}
$mysql = Factory::createDB('mysql');
$mysql->conn();
二、工厂方法
主要就是为每个类,单独新建一个Factory
类,每次调用相应的Factory
返回需要的对象实例
<?php
/**
* 工厂模式
*
*/
interface db{
public function conn();
}
interface Factory{
function createDB();
}
class Mysql implements db{
public function conn(){
echo '连接上mysql';
}
}
class Sqlite implements db{
public function conn(){
echo '连接上sqlite';
}
}
class mysqlFactory implements Factory{
public function createDB(){
return new Mysql();
}
}
class sqliteFactory implements Factory{
public function createDB(){
return new Sqlite();
}
}
// 这样不管新增其它什么数据库类,前面的代码都不用改
// 如果需要添加oracle数据库,只要实现db接口和factory工厂方法即可,这就是前面所说的开闭原则
$fact = new mysqlFactory();
$db = $fact->createDB();
$fact = new sqliteFactory();
$db = $fact->createDB();
三、抽象工厂
https://www.cnblogs.com/52fhy/p/7076396.html?utm_source=itdadao&utm_medium=referral