设计模式之抽象工厂
2018-01-07 本文已影响0人
守望星空l
抽象工厂是工厂模式中最抽象的一种模式。
工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构。
现在我们的项目需要新增一个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数据库的支持,无疑改动的地方太多,这也是抽象工厂的一个不好的地方。如果想要使用起来更简单,还要进行一些改进。