工厂方法是在简单工厂的基础上进一步抽象产生的一种设计模式,在新增产品时,简单工厂模式下需要修改原有的文件,不符合开闭原则,而使用工厂方法就可以避免修改原有的文件。
现在需要新增一种AccessModel,将原有的简单工厂修改为工厂方法。
下面是代码:
<?php
//抽象产品基类
abstract class DataModel
{
abstract public function handle();
}
//具体产品
class MysqlModel extends DataModel
{
public function handle()
{
echo 'this is mysql';
}
}
class OracleModel extends DataModel
{
public function handle()
{
echo 'this is oracle';
}
}
class AccessModel extends DataModel
{
public function handle()
{
echo 'this is access';
}
}
//抽象工厂类
abstract class IFactory
{
abstract public function create();
}
//具体工厂
class MysqlFactory extends IFactory
{
public function create()
{
return new MysqlModel();
}
}
class OracleFactory extends IFactory
{
public function create()
{
return new OracleModel();
}
}
class AccessFactory extends IFactory
{
public function create()
{
return new AccessModel();
}
}
$myFactory = new AccessFactory();
$myModel = $myFactory->create();
$myModel->handle();
这样 工厂方法的代码就完成了。
以后再新增其他数据库的支持时,只有新增类文件就可以了,不需要改动原本的类。