简单工厂模式(Simple Factory模式)
2020-03-07 本文已影响0人
苏康申
什么是简单工厂模式
使用的频率也是非常高,它的官方解释为:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
工厂模式使一个类的实例化延迟到其子类。
这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(
这样工厂类才不用经常更改)。
PS:不修改代码的话,是无法扩展的。
简单工厂模式的作用
简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的
接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂,一定程度上可以很好的降低耦合度。
具体实现
Factory:工厂角色
工厂角色负责实现创建所有实例的内部逻辑
Product:抽象产品角色
抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
ConcreteProduct:具体产品角色
具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
//-----------抽象产品角色------------
//定义保险产品工厂获取产品
interface InsuranceProduct
{
public function getProductList();
}
//-----------具体产品角色------------
//众安保险
class ZhongAn implements InsuranceProduct {
public function getProductList()
{
return "ZhongAn Insurance ProductList";
}
}
//小雨伞保险
class XiaoYuSan implements InsuranceProduct {
public function getProductList()
{
return "XiaoYuSan Insurance ProductList";
}
}
//齐欣保险
class QiXin implements InsuranceProduct {
public function getProductList()
{
return "QiXin Insurance ProductList";
}
}
//-----------工厂角色------------
class Factory
{
public static function createProductFactory($param)
{
$result = null;
switch($param)
{
case 'QiXin':
$result = new QiXin();
break;
case 'XiaoYuSan':
$result = new XiaoYuSan();
break;
case 'ZhongAn':
$result = new ZhongAn();
break;
}
return $result;
}
}
echo Factory::createProductFactory("QiXin")->getProductList();