抽象工廠是工廠模式中最抽象的一種模式。
工廠方法模式針對的是一個產品等級結構,而抽象工廠模式針對的是多個產品等級結構。
現在我們的項目需要新增一個UserModel,通過它來操作用戶表的相關數據,也需要ProductModel,來操作產品相關的數據。
數據庫可能使用Mysql,也可能使用Oracle。
使用抽象工廠模式來實現。
下面是代碼:
<?php
//抽象產品類
abstract class MysqlModel
{
abstract public function handle();
}
//具體產品
class MysqlUserModel extends MysqlModel
{
public function handle()
{
echo 'this is MysqlUserModel';
}
}
class MysqlProductModel extends MysqlModel
{
public function handle()
{
echo 'this is MysqlProductModel';
}
}
abstract class OracleModel
{
abstract public function handle();
}
class OracleUserModel extends OracleModel
{
public function handle()
{
echo 'this is OracleUserModel';
}
}
class OracleProductModel extends OracleModel
{
public function handle()
{
echo 'this is OracleProductModel';
}
}
//抽象工廠類
abstract class IFactory
{
abstract public function createMysqlModel();
abstract public function createOracleModel();
}
//具體工廠
class UserModelFactory extends IFactory
{
public function createMysqlModel()
{
return new MysqlUserModel();
}
public function createOracleModel()
{
return new OracleUserModel();
}
}
class ProductModelFactory extends IFactory
{
public function createMysqlModel()
{
return new MysqlProductModel();
}
public function createOracleModel()
{
return new OracleProductModel();
}
}
$myFactory = new UserModelFactory();
$myModel = $myFactory->createMysqlModel();
$myModel->handle();
這樣 抽象工廠的代碼就完成了。
如果這個時候想新增一個Access數據庫的支持,無疑改動的地方太多,這也是抽象工廠的一個不好的地方。如果想要使用起來更簡單,還要進行一些改進。