design-patterns/code/abstract_factory.php
2025-07-03 21:15:26 +03:00

43 lines
982 B
PHP

<?php
/**
* @package: patterns
* @author: Yevhen Odynets
* @date: 2025-07-03
* @time: 20:20
*/
declare(strict_types = 1);
use Pattern\Creational\AbstractFactory\{NovapostDeliveryFactory, UkrpostDeliveryFactory};
use Pattern\Creational\AbstractFactory\{JustinDeliveryFactory, MeestDeliveryFactory};
/**
* @param array $factories
*
* @return void
*/
function delivery(array $factories): void
{
foreach ($factories as $factory) {
// getting the delivery service
$deliveryService = $factory->createDeliveryService();
// getting the parcel
$package = $factory->createPackage();
// checking the parcel
$package->getConsist();
// sending the parcel
$deliveryService->sendPackage($package);
echo '<hr/>' . PHP_EOL;
}
}
$factories = [
new MeestDeliveryFactory(),
new NovapostDeliveryFactory(),
new JustinDeliveryFactory(),
new UkrpostDeliveryFactory(),
];
delivery($factories);