Middle
Kuo skiriasi 'fabrikos' modelis nuo 'fabriko metodo'?
sobes.tech AI
Atsakymas iš AI
Pavyzdys "Fabrika" (Simple Factory) atsako už vieno tipo objektų kūrimą, slepiant jų instancijavimo logiką. Jis yra atskiras klasė arba statinė funkcija, kuri pagal įvestus parametrus sukuria ir grąžina konkretų objektą.
<?php
class ProductA {}
class ProductB {}
class ProductFactory
{
public static function createProduct(string $type)
{
switch ($type) {
case 'A':
return new ProductA();
case 'B':
return new ProductB();
default:
throw new \InvalidArgumentException("Invalid product type");
}
}
}
"Fabrikos" (Factory Method) šablonas yra kūrybinis dizaino šablonas, kuris apibrėžia sąsają objektui kurti, bet leidžia pogrupiams nuspręsti, kokį klasės egzempliorių kurti. Jis perkelia atsakomybę už objektų kūrimą į pogrupius.
<?php
interface Product
{
public function operation(): string;
}
class ConcreteProductA implements Product
{
public function operation(): string
{
return "Result of ConcreteProductA";
}
}
class ConcreteProductB implements Product
{
public function operation(): string
{
return "Result of ConcreteProductB";
}
}
abstract class Creator
{
abstract public function factoryMethod(): Product;
public function someOperation(): string
{
// Call the factory method to create a Product object.
$product = $this->factoryMethod();
// Now, use the product.
return "Creator: The same creator's code has just worked with " . $product->operation();
}
}
class ConcreteCreatorA extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductB();
}
}
Pagrindinis skirtumas yra šis:
| Savybė | "Fabrika" (Simple Factory) modelis | "Fabrikos metodas" (Factory Method) |
|---|---|---|
| Atsakomybė | Vienas klasė arba statinė funkcija sukuria objektus. | Pogrupiai nusprendžia, kokį klasės egzempliorių kurti. |
| Lankstumas | Ribotas. Reikia keisti fabrikos klasę, pridedant naują tipą. | Aukštas. Lengvai išplečiamas pridedant naujas pogrupius-kūrėjus. |
| Paveldėjimas | Paprastai nenaudojama arba naudojama vieno fabriko kūrimui. | Priklauso nuo paveldėjimo, norint nustatyti, kokį objektą kurti. |
| Abstrakcijos lygis | Mažiau abstraktus. | Daugiau abstraktus. |
| Tikslas | Objektų centralizuotas kūrimas. | Kūrybos proceso delegavimas pogrupiams. |