php工厂方法模式是什么
时间:2022-02-11 13:28
php工厂方法模式属于创建型模式,是常用设计模式之一,并且工厂模式还分为简单工厂模式、工厂方法模式、静态工厂模式以及抽象工厂模式,而工厂方法就是为了解决简单工厂扩展性的问题。 所属:创建型模式,常用设计模式之一 工厂模式分为:简单工厂模式、工厂方法模式、静态工厂模式、抽象工厂模式。 下面为工厂方法模式。 工厂方法就是为了解决简单工厂扩展性的问题,相信大家再看简单工厂是也发现了其缺陷, 以前简单工厂要扩展的时候,需要修改工厂内容,这就违背了设计模式对外扩展开放,对内修改关闭原则,所以搞了个工厂方法模式,这是我的理解, 涉及元素: 工厂类(实例化产品A) 工厂类(实例化产品B) 产品类B 一个商城网站,支持多种支付功能,例如:支付宝、微信、某银行、某银行……,程序如何设计。 如果按照简单工厂模式的话,声明一个工厂类,由工厂类判断调用哪种支付方式,那么必然存在工厂类不断修改的操作,每增加一个支付方式都要去修改工厂类,违背了【开放封闭】原则 解决的问题: 1. 解决简单工厂【开放封闭】原则问题 流程图如下: 程序设计代码: 1. 测试入口index.php 2. 工厂类接口,支付宝支付工厂类,微信支付工厂类,银联支付工厂类。 工厂类接口:PayFactoryInterface.php 支付宝支付工厂类:ZhiFuBaoFactory.php 微信支付工厂类:WeiXinFactory.php 银联支付工厂类:YinLianFactory.php 3. 产品类接口,支付宝支付产品类,微信支付产品类,银联支付产品类。 产品类接口:PayInterface.php 支付宝支付产品类:ZhiFuBao.php 微信支付产品类:WeiXin.php 银联支付产品类:Yinlian.php GitHub源码地址:https://github.com/xiaobaoword/design_pattern/tree/master 以上就是php工厂方法模式是什么的详细内容,更多请关注gxlsystem其它相关文章!
产品类A<?php
namespace factory_method;
include '../autoload.php';
// 张三支付
$param = [];
$param['name'] = '张三';
$param['money'] = 100;
$factory = new WeiXinFactory();
$mode = $factory->createMode(); // 使用工厂类获取产品类
$mode->doAction($param); // 执行产品类方法
<?php
namespace factory_method;/**
* 工厂类接口
* Interface PayFactoryInterface
* @package factory_method */interface PayFactoryInterface
{ public function createMode();
}
<?php
namespace factory_method;/**
* 支付宝产品类转工厂类
* Class ZhiFuBaoFactory
* @package factory_method */class ZhiFuBaoFactory implements PayFactoryInterface
{ public function createMode()
{ return new ZhiFuBao();
}
}
<?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();
}
}
<?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();
}
<?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()
{
} /**
* 发送消息 */
public function sendNews()
{
}
}
<?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()
{
}
}