php工厂技巧模式是什么
发布时间:2022-07-21 13:50:36 所属栏目:PHP教程 来源:互联网
导读:引言 所属:创建型模式,常用设计模式之一 工厂模式分为:简单工厂模式、工厂方法模式、静态工厂模式、抽象工厂模式。 下面为工厂方法模式。 模式概述 工厂方法就是为了解决简单工厂扩展性的问题,相信大家再看简单工厂是也发现了其缺陷, 产品类A 产品类B
引言 所属:创建型模式,常用设计模式之一 工厂模式分为:简单工厂模式、工厂方法模式、静态工厂模式、抽象工厂模式。 下面为工厂方法模式。 模式概述 工厂方法就是为了解决简单工厂扩展性的问题,相信大家再看简单工厂是也发现了其缺陷, 产品类A 产品类B 举个栗子 一个商城网站,支持多种支付功能,例如:支付宝、微信、某银行、某银行……,程序如何设计。 如果按照简单工厂模式的话,声明一个工厂类,由工厂类判断调用哪种支付方式,那么必然存在工厂类不断修改的操作,每增加一个支付方式都要去修改工厂类,违背了【开放封闭】原则 解决的问题: 1. 解决简单工厂【开放封闭】原则问题 流程图如下: 程序设计代码: 1. 测试入口index.php <?php namespace factory_method; include '../autoload.php'; // 张三支付 $param = []; $param['name'] = '张三'; $param['money'] = 100; $factory = new WeiXinFactory(); $mode = $factory->createMode(); // 使用工厂类获取产品类 $mode->doAction($param); // 执行产品类方法 2. 工厂类接口,支付宝支付工厂类,微信支付工厂类,银联支付工厂类。 工厂类接口:PayFactoryInterface.php namespace factory_method;/** * 工厂类接口 * Interface PayFactoryInterface * @package factory_method */interface PayFactoryInterface { public function createMode(); } 支付宝支付工厂类:ZhiFuBaoFactory.php * Class ZhiFuBaoFactory * @package factory_method */class ZhiFuBaoFactory implements PayFactoryInterface { public function createMode() { return new ZhiFuBao(); } } 微信支付工厂类:WeiXinFactory.php <?php namespace factory_method;/** * 微信产品类转为工厂类 * Class WeiXinFactory * @package factory_method */class WeiXinFactory implements PayFactoryInterface { public function createMode() { return new WeiXin(); <?php namespace factory_method;/** * 银联产品类转工厂类 * Class YinLianFactory * @package factory_method */class YinLianFactory implements PayFactoryInterface { public function createMode() { return new Yinlian(); } } 3. 产品类接口,支付宝支付产品类,微信支付产品类,银联支付产品类。 产品类接口:PayInterface.php <?php namespace factory_method;/** * Interface PayInterface * 定义支付Api规范接口 */interface PayInterface { /** * 发起扣款 public function sendNews(); } 支付宝支付产品类:ZhiFuBao.php <?php namespace factory_method;// 银联class ZhiFuBao implements PayInterface { public function doAction($param) { $name = $param['name']; $money = $param['money']; echo $name . '使用支付宝支付,支付金额' . $money; } /** * 记录日志 */ public function payLog() { } /** * 发送消息 */ public function sendNews() { <?php namespace factory_method;// 银联class WeiXin implements PayInterface { public function doAction($param) { $name = $param['name']; $money = $param['money']; echo $name . '使用微信支付,支付金额' . $money; } /** * 记录日志 */ public function payLog() { } /** * 发送消息 */ <?php namespace factory_method;// 银联class Yinlian implements PayInterface { public function doAction($param) { $name = $param['name']; $money = $param['money']; echo $name . '使用银联支付,支付金额' . $money; } /** * 记录日志 */ public function payLog() { } /** * 发送消息 */ public function sendNews() { } } (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |