设计模式-工厂模式

本文分享了如何在PHP业务开发中利用工厂模式组织支付逻辑,通过WechatPay接口实例化,简化支付渠道管理。通过设计模式优化后的代码结构更清晰,但扩展性面临挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开篇:

	现在的开发代码层出不穷,难以维护,个人觉得是缺少了设计模式的观念。大家只会注重到高并发,以及多进程,线程之类的“奇淫技巧”。导致写出来的代码重
	构困难,大大提高了开发时间。我就分享一下我自己在日常业务开发中使用到的设计模式。声明:本人是一个phper。并不是只有JAVA才能使用到设计模式去开
	发代码,我更觉得这是一种开发思维,借助前辈的经验来避免写出“丑陋”的代码。

工厂模式:

	我觉得工厂模式的意思就跟它的名字是一样的“工厂”,各式各类的工厂可以完成各式各类的物件。下面我就直接用案例说明吧

业务说明:

	最近写到了订单支付业务,支付业务完之后需要区分支付渠道,用于用户积分分配,以及退款渠道区分。

原有代码:(不是原本业务代码,业务代码涉及到分单优惠问题,下面只是演示作用)

		  /**
		     * @param string $payChannel 支付渠道
		     * @param string $orderno  订单号
		     * @return object  支付结果
		     * 支付订单
		     */
		    public static function payOrder(string $payChannel,string $orderno)
		    {
		       //获取订单
		       $orders = Order::getOrderByNo($orderno);
		       //获取金额
		       $amount = $orders['amount'];
		       //判断支付渠道
		       //微信支付
		       if ($payChannel == 'wechat'){
		           //支付逻辑
		           $payUrl = "示例";
		           $channelConfig = PayConfig::getWechatPayParam();
		           ..................
		       }
		       //支付宝
		       if ($payChannel == 'ali'){
		           //支付逻辑
		       }
		       //余额
		       if ($payChannel == 'funds'){
		           //支付逻辑
		       }
		       return $res;

现有:

				interface Pay
				{
				    /**
				     * Pay constructor.
				     * @param float $amount
				     * @param string $orderno
				     * @param int $uid
				     * @param string $desc
				     * 支付
				     */
				    public function pay(double $amount,string $orderno,int $uid,string $desc){};
				
				    /**
				     * @param PayLog $logParam
				     * @return mixed
				     * 记录日志
				     */
				    public function writeLog(PayLog $logParam);
				}

微信支付:

				class WechatPay implements Pay
				{
				    public function pay(float $amount, string $orderno, int $uid, string $desc)
				    {
				        //业务逻辑
				    }
				
				    public function writeLog(PayLog $logParam)
				    {
				        // TODO: Implement writeLog() method.
				    }
				}

工厂:

				class PayFactory
				{
				    /**
				     * @param $payChannel
				     * @return WechatPay
				     * 获取服务
				     */
				    public function getService($payChannel)
				    {
				        if ($payChannel == 'wechat'){
				            return new WechatPay();
				        }
				    }
				}

调用代码:

			    /**
			     * @param string $payChannel 支付渠道
			     * @param string $orderno  订单号
			     * @return object  支付结果
			     * 支付订单
			     */
			    public static function payOrder(string $payChannel,string $orderno)
			    {
			        //获取指定服务
			        $payFactory = new PayFactory();
			        $payService = $payFactory->getService($payChannel);
			        ................
			    }

总结:

	这样写完之后,结构会清晰很多,方便扩展而且开发思路也很清晰,但是这样子写在后续扩展支付方式方面会有问题,(我这边就不用设计模式原则来解释感觉
	会画蛇添足)接下来 一个一个模式总结再说。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值