php工厂方法模式是什么
发布:smiling 来源: PHP粉丝网 添加日期:2022-07-18 15:30:44 浏览: 评论:0
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
- <?php
- namespace factory_method;/**
- * 工厂类接口
- * Interface PayFactoryInterface
- * @package factory_method */interface PayFactoryInterface
- { public function createMode();
- }
支付宝支付工厂类:ZhiFuBaoFactory.php
- <?php
- namespace factory_method;/**
- * 支付宝产品类转工厂类
- * 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();
- }
- }
银联支付工厂类:YinLianFactory.php
- <?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
- { /**
- * 发起扣款
- * @return mixed */
- public function doAction($param); /**
- * 记录日志
- * @return mixed */
- public function payLog(); /**
- * 发送短信
- * @return mixed */
- 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()
- {
- }
- }
微信支付产品类:WeiXin.php
- <?php
- namespace 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
- <?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()
- {
- }
- }
以下为源码地址
GitHub源码地址:https://github.com/xiaobaoword/design_pattern/tree/master
Tags: php工厂方法模式
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)