Factory Method

This commit is contained in:
2025-07-03 19:35:54 +03:00
parent 91f8ded888
commit 0f4618edf5
24 changed files with 409 additions and 31 deletions

58
code/factory_method.php Normal file
View File

@@ -0,0 +1,58 @@
<?php
/**
* @package: patterns
* @author: Yevhen Odynets
* @date: 2025-07-03
* @time: 12:16
*/
declare(strict_types = 1);
use Pattern\Creational\FactoryMethod\{CashlessPayment, CashPayment, Order, PaymentHelper};
use Random\RandomException;
function execute(string $scope): void
{
echo '<hr/>' . ucfirst($scope) . ' App Payments:<hr/>' . PHP_EOL;
try {
$orderData = [
[
'order' => new Order(getFloatRange()),
'paymentType' => 'privat',
],
[
'order' => new Order(getFloatRange()),
'paymentType' => 'raiffeisen',
],
[
'order' => new Order(getFloatRange()),
'paymentType' => 'ing',
],
[
'order' => new Order(getFloatRange()),
'paymentType' => 'otp',
]
];
if ($scope === 'web') {
$orderData[] = [
'order' => new Order(getFloatRange()),
'paymentType' => 'cash',
];
}
foreach ($orderData as $orderDataItem) {
['order' => $order, 'paymentType' => $type] = $orderDataItem;
$payment = PaymentHelper::getPaymentFactory($type)->createPayment();
$payment->pay($order);
}
} catch (RandomException $e) {
echo $e->getMessage();
}
}
execute('web');
execute('mobile');

View File

@@ -9,7 +9,7 @@
declare(strict_types = 1);
use Pattern\Creational\{Singleton, Sub\Single};
use Pattern\Creational\{Singleton\Single, Singleton\Singleton};
/**
* The client code.