php工厂方法模式属于创建型模式,是常用设计模式之一,并且工厂模式还分为简单工厂模式、工厂方法模式、静态工厂模式以及抽象工厂模式,而工厂方法就是为了解决简单工厂扩展性的问题。
推荐:《php教程》
引言
所属:创建型模式,常用设计模式之一
工厂模式分为:简单工厂模式、工厂方法模式、静态工厂模式、抽象工厂模式。
下面为工厂方法模式。
模式概述
工厂方法就是为了解决简单工厂扩展性的问题,相信大家再看简单工厂是也发现了其缺陷,
以前简单工厂要扩展的时候,需要修改工厂内容,这就违背了设计模式对外扩展开放,对内修改关闭原则,所以搞了个工厂方法模式,这是我的理解,
涉及元素:
工厂类(实例化产品a)
工厂类(实例化产品b)
产品类a
产品类b
举个栗子
一个商城网站,支持多种支付功能,例如:支付宝、微信、某银行、某银行……,程序如何设计。
如果按照简单工厂模式的话,声明一个工厂类,由工厂类判断调用哪种支付方式,那么必然存在工厂类不断修改的操作,每增加一个支付方式都要去修改工厂类,违背了【开放封闭】原则
解决的问题:
1. 解决简单工厂【开放封闭】原则问题
流程图如下:
程序设计代码:
1. 测试入口index.php
<?phpnamespace factory_method;include '../autoload.php';// 张三支付$param = [];$param['name'] = '张三';$param['money'] = 100;$factory = new weixinfactory();$mode = $factory->createmode(); // 使用工厂类获取产品类$mode->doaction($param); // 执行产品类方法
2. 工厂类接口,支付宝支付工厂类,微信支付工厂类,银联支付工厂类。
工厂类接口:payfactoryinterface.php
<?phpnamespace factory_method;/** * 工厂类接口 * interface payfactoryinterface * @package factory_method */interface payfactoryinterface{ public function createmode();}
支付宝支付工厂类:zhifubaofactory.php
<?phpnamespace factory_method;/** * 支付宝产品类转工厂类 * class zhifubaofactory * @package factory_method */class zhifubaofactory implements payfactoryinterface{ public function createmode() { return new zhifubao(); }}
微信支付工厂类:weixinfactory.php
<?phpnamespace factory_method;/** * 微信产品类转为工厂类 * class weixinfactory * @package factory_method */class weixinfactory implements payfactoryinterface{ public function createmode() { return new weixin(); }}
银联支付工厂类:yinlianfactory.php
<?phpnamespace factory_method;/** * 银联产品类转工厂类 * class yinlianfactory * @package factory_method */class yinlianfactory implements payfactoryinterface{ public function createmode() { return new yinlian(); }}
3. 产品类接口,支付宝支付产品类,微信支付产品类,银联支付产品类。
产品类接口:payinterface.php
<?phpnamespace factory_method;/** * interface payinterface * 定义支付api规范接口 */interface payinterface{ /** * 发起扣款 * @return mixed */ public function doaction($param); /** * 记录日志 * @return mixed */ public function paylog(); /** * 发送短信 * @return mixed */ public function sendnews();}
支付宝支付产品类:zhifubao.php
<?phpnamespace 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() { }}
微信支付产品类:weixin.php
<?phpnamespace factory_method;// 银联class weixin implements payinterface{ public function doaction($param) { $name = $param['name']; $money = $param['money']; echo $name . '使用微信支付,支付金额' . $money; } /** * 记录日志 */ public function paylog() { } /** * 发送消息 */ public function sendnews() { }}
银联支付产品类:yinlian.php
<?phpnamespace 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() { }}
以下为源码地址
github源码地址:https://github.com/xiaobaoword/design_pattern/tree/master
以上就是php工厂方法模式是什么的详细内容。