开篇:
现在的开发代码层出不穷,难以维护,个人觉得是缺少了设计模式的观念。大家只会注重到高并发,以及多进程,线程之类的“奇淫技巧”。导致写出来的代码重
构困难,大大提高了开发时间。我就分享一下我自己在日常业务开发中使用到的设计模式。声明:本人是一个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);
................
}
总结:
这样写完之后,结构会清晰很多,方便扩展而且开发思路也很清晰,但是这样子写在后续扩展支付方式方面会有问题,(我这边就不用设计模式原则来解释感觉
会画蛇添足)接下来 一个一个模式总结再说。