Middle
Ի՞նչ է տարբերությունը 'ֆաբրիկա' պattern-ի և 'ֆաբրիկայի մեթոդի' միջև։
sobes.tech AI
Պատասխան AI-ից
Սխեման "Ֆաբրիկա" (Simple Factory) պատասխանատու է օբյեկտների ստեղծման համար մեկ տիպի, թաքցնելով նրանց ինստանցիացման տրամաբանությունը։ Այն ներկայացվում է որպես առանձին դաս կամ סטատիկ ֆունկցիա, որը հիմք ընդունելով մուտքային պարամետրերը, ստեղծում և վերադարձնում է կոնկրետ օբյեկտ։
<?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");
}
}
}
"Ֆաբրիկայի մեթոդ" (Factory Method) մոդելը ստեղծող է, որը սահմանում է օբյեկտի ստեղծման ինտերֆեյսը, բայց թույլ է տալիս ենթակլասներին որոշել, թե որ դասը պետք է ինստանցիացվի։ Այն փոխանցում է օբյեկտների ստեղծման պատասխանատվությունը ենթակլասներին։
<?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();
}
}
Հիմնական տարբերությունը հետևյալն է.
| Գծագրություն | "Ֆաբրիկա" (Simple Factory) մոդելը՝ մեկ դաս կամ ստատիկ ֆունկցիա ստեղծում է օբյեկտներ։ | "Ֆաբրիկայի մեթոդ" (Factory Method) մոդելը՝ ենթակլասները որոշում են, թե որ դասը պետք է ինստանցիացվի։ |
|---|---|---|
| Գործառույթը | Սահմանափակ։ Պահանջում է փոփոխություններ ֆաբրիկայի դասում նոր տիպի արտադրանքի ավելացման ժամանակ։ | Բարձր։ Հեշտ է ընդլայնել նոր ենթակլասների ավելացմամբ։ |
| ժառանգականություն | Սովորաբար չի օգտագործվում կամ օգտագործվում է միայն մեկ ֆաբրիկայի համար։ | Զависում է ժառանգությունից՝ որոշելու համար, թե ինչ տիպի օբյեկտ է ստեղծվում։ |
| Աբստրակտության մակարդակ | Փոքր։ | Ավելի բարձր։ |
| Մասին նպատակ | Կենտրոնացված օբյեկտների ստեղծում։ | Օբյեկտների ստեղծումը հանձնարարվում է ենթակլասներին։ |