简单工厂模式订定义:
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,是工厂模式的一个特殊实现。
简单工厂模式角色:
工厂角色:负责实现创建所有实例的内部逻辑,可以被外界直接调用,创建所需的产品对象。
抽象产品角色:工厂角色所创建的所有对象的父类,负责定义所有实例的公共接口。
具体产品角色:是工厂角色创建的具体对象。
有一个电商平台,需要导出客户,订单等各种数据,那么我们可以将这些数据定义为具体的产品类。
本代码基于Yii2.0
抽象产品角色:
<?php namespace common\services; use Yii; /** * 定义导出接口 * Interface ExportInterface * * @package common\services */ interface ExportInterface { function getFileName(); function getHeader(); function queryData(); function writeData(); } 具体产品角色:
<?php namespace common\services; use common\services\ExportInterface; use Yii; /** * 导出订单数据 * Class ExportOrderService * * @package common\services */ class ExportOrderService implements ExportInterface { /** * 获取导出文件名 * @return string */ public function getFileName() { return 'order.csv'; } /** * 获取表头 * @return string[] */ public function getHeader() { return ['订单号','订单金额','下单日期']; } /** * 获取订单数据 * @return array[] */ public function queryData() { $data = [['123456',1000,'2022-02-22']]; return $data; } /** * 写数据 */ public function writeData() { $fileName = $this->getFileName(); $header = $this->getHeader(); $orderData = $this->queryData(); //以下是将数据写进csv文件,略过... echo 'export order end'; } }
<?php namespace common\services; use common\services\ExportInterface; use Yii; /** * 导出客户数据 * Class ExportOrderService * * @package common\services */ class ExportUserService implements ExportInterface { /** * 获取导出文件名 * @return string */ public function getFileName() { return 'user.csv'; } /** * 获取表头 * @return string[] */ public function getHeader() { return ['姓名','手机号','地址']; } /** * 获取客户数据 * @return array[] */ public function queryData() { $data = [['张三','13800138000','广东深圳']]; return $data; } /** * 写数据 */ public function writeData() { $fileName = $this->getFileName(); $header = $this->getHeader(); $orderData = $this->queryData(); //以下是将数据写进csv文件,略过... echo 'export user end'; } }
工厂角色:
<?php namespace common\services; use common\services\ExportOrderService; use common\services\ExportUserService; use Yii; use yii\base\UserException; /** * 工厂类 * Class SimpleFactoryService * * @package common\services */ class SimpleFactoryService { static public $typeMap = [ 'order'=>ExportOrderService::class, 'user'=>ExportUserService::class, ]; /** * 获取具体导出类 * @param $type * * @return object * @throws UserException * @throws \yii\base\InvalidConfigException */ public static function create($type) { if(!in_array($type,['order','user'])){ throw new UserException('参数错误!'); } $obj = \Yii::createObject(self::$typeMap[$type]); return $obj; } }
测试类:
<?php namespace backend\controllers; use common\services\SimpleFactoryService; use Yii; use yii\web\Controller; class SimpleFactoryTestController extends Controller { /** * 测试 */ public function actionIndex() { $obj = SimpleFactoryService::create('order'); $obj->writeData(); $obj = SimpleFactoryService::create('user'); $obj->writeData(); } }