工廠方法是在簡單工廠的基礎上進一步抽象產生的一種設計模式,在新增產品時,簡單工廠模式下需要修改原有的文件,不符合開閉原則,而使用工廠方法就可以避免修改原有的文件。
現在需要新增一種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();
這樣 工廠方法的代碼就完成了。
以后再新增其他數據庫的支持時,只有新增類文件就可以了,不需要改動原本的類。