简单工厂属于创建型模式,是一个比较容易理解和掌握的模式。
对于调用方来说,在简单工厂模式下,得到一个对象是非常容易的,只需要通过工厂类传入对应的参数,即可得到想要的实例,不需要关心繁琐的创建对象的过程。
代码如下:
<?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 Datafactory
{
public static function getIns($type)
{
switch ($type) {
case 'mysql':
return new MysqlModel();
case 'oracle':
return new oracleModel();
default:
return null;
break;
}
}
}
$myModel = Datafactory::getIns('mysql');
$myModel->handle();
这样 简单工厂的代码就完成了。
不过当dataModel要新增一种数据库支持时,就需要改动factory了,这样其实违背了面向对象程序设计中的开闭原则。要回避这个问题,就要使用工厂方法了。