在PHP中,工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種在不指定具體類的情況下創(chuàng)建對(duì)象的方法。依賴注入(Dependency Injection,DI)是一種實(shí)現(xiàn)控制反轉(zhuǎn)(Inversion of Control,IoC)的技術(shù),它允許我們將對(duì)象的依賴關(guān)系從對(duì)象內(nèi)部移動(dòng)到對(duì)象外部,從而使得代碼更加靈活和可測(cè)試。
下面是一個(gè)使用工廠模式和依賴注入的示例:
PaymentGateway
,它表示支付網(wǎng)關(guān)。然后,我們創(chuàng)建兩個(gè)實(shí)現(xiàn)該接口的類:StripePaymentGateway
和 PaypalPaymentGateway
。interface PaymentGateway
{
public function charge(float $amount);
}
class StripePaymentGateway implements PaymentGateway
{
public function charge(float $amount)
{
// Stripe 支付邏輯
}
}
class PaypalPaymentGateway implements PaymentGateway
{
public function charge(float $amount)
{
// PayPal 支付邏輯
}
}
PaymentGatewayFactory
,它負(fù)責(zé)根據(jù)配置或請(qǐng)求參數(shù)創(chuàng)建適當(dāng)?shù)?PaymentGateway
實(shí)例。class PaymentGatewayFactory
{
public static function createPaymentGateway(string $gatewayType): PaymentGateway
{
switch ($gatewayType) {
case 'stripe':
return new StripePaymentGateway();
case 'paypal':
return new PaypalPaymentGateway();
default:
throw new InvalidArgumentException('Invalid payment gateway type');
}
}
}
function processPayment(PaymentGateway $gateway, float $amount)
{
$gateway->charge($amount);
}
// 使用 Stripe 支付網(wǎng)關(guān)
$gateway = PaymentGatewayFactory::createPaymentGateway('stripe');
processPayment($gateway, 100.00);
// 使用 PayPal 支付網(wǎng)關(guān)
$gateway = PaymentGatewayFactory::createPaymentGateway('paypal');
processPayment($gateway, 100.00);
在這個(gè)例子中,我們通過(guò)工廠模式創(chuàng)建 PaymentGateway
實(shí)例,并通過(guò)依賴注入將其實(shí)例傳遞給 processPayment
函數(shù)。這樣,我們就可以輕松地更改使用的支付網(wǎng)關(guān),而無(wú)需修改 processPayment
函數(shù)的代碼。