php工厂模式连接数据库,PHP设计模式——简单工厂模式(Simple Factory)

本文介绍了如何运用简单工厂模式在项目中处理不确定数量的支付操作,例如数据库连接和支付方式选择(如支付宝、银联)。通过创建支付渠道工厂类,实现了根据不同支付类型动态创建支付实例,如银联支付和支付宝支付。这种模式允许在不修改已有代码的情况下,方便地添加新的支付方式。
摘要由CSDN通过智能技术生成

工厂主要有三种模式:抽象工厂、简单工厂、工厂方法,本文所说的是简单工厂模式,其他两种模式也是大同小异。

应用场景

项目中,在不确定有多少种处理操作时,可以用简单工厂模式。

比如:

数据库的连接,可能是mysql,也可能是oracle

支付方式的选择,可能是支付宝,也可能是银联支付,也可能后期会加别的支付方式。

示例代码

这里以支付渠道选择为例。

部分目录结构

├── app

│   └── payment

│   ├── Factory.php

│   └── handle

│   ├── Alipay.php

│   ├── PayInterface.php

│   └── Unionpay.php

app/payment/Factory.php为工厂类

namespace app\payment;

use app\payment\handle\Alipay;

use app\payment\handle\Unionpay;

/**

* 支付渠道工厂

* Class Factory

* @package app\payment

*/

class Factory

{

/**

* 创建支付渠道实例

* @param $type

* @return Alipay|Unionpay

* @throws \ErrorException

*/

public function create($type)

{

switch ($type) {

// 银联支付

case 'unionpay':

return new Unionpay();

// 支付宝

case 'alipay':

return new Alipay();

default:

throw new \ErrorException('支付渠道不存在');

}

}

}

app/payment/handle/PayInterface.php为每个支付渠道必须完成的统一接口

namespace app\payment\handle;

/**

* 支付渠道统一接口

* Interface PayInterface

* @package app\payment\handle

*/

interface PayInterface

{

/**

* 设置支付参数

* @param array $data

* @return mixed

*/

public function setParams(array $data);

/**

* 发起支付

* @return mixed

*/

public function send();

/**

* 检查签名

* @param array $data

* @return mixed

*/

public function check(array $data);

}

app/payment/handle/Unionpay.php为银联支付实例

这里仅做演示,未实现具体方法

namespace app\payment\handle;

/**

* 银联支付

* Class Unionpay

* @package app\payment\handle

*/

class Unionpay implements PayInterface

{

public function setParams(array $data)

{

// TODO: Implement setParams() method.

}

public function send()

{

// TODO: Implement execute() method.

}

public function check(array $data)

{

// TODO: Implement check() method.

}

}

app/payment/handle/Alipay.php为支付宝实例

这里仅做演示,未实现具体方法

namespace app\payment\handle;

/**

* 支付宝支付

* Class Alipay

* @package app\payment\handle

*/

class Alipay implements PayInterface

{

public function setParams(array $data)

{

// TODO: Implement setParams() method.

}

public function send()

{

// TODO: Implement send() method.

}

public function check(array $data)

{

// TODO: Implement check() method.

}

}

使用工厂创建支付实例,发起支付:

use app\payment\Factory;

$factory = new Factory();

// 创建支付渠道

$payment = $factory->create('alipay');

// 设置支付参数

$payment->setParams([

[

'subject' => '测试',

'out_trade_no' => '56AF4DSA4DSF5A64D5ASF',

'total_amount' => '0.01',

]

]);

// 发起支付

$payment->send();

这样就实现了一个简单工厂模式,后期如果要加其他支付渠道,

只需要添加一个支付实例实现app/payment/handle/PayInterface.php接口的方法即可,

调用的方法不变,这样即添加了新功能,又不改变原有代码逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值