Middle
Фарқи байни намунаи 'фабрика' ва 'усули фабрика' чист?
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) |
|---|---|---|
| Мавзӯъ | Як синф ё статикӣ функсия объектҳоро месозад. | Синфҳои зерӣ муайян мекунанд, ки кадом синф бояд инстанс шавад. |
| Функционалност | Маҳдуд. Талаб мекунад, ки дар синфи фабрика тағирот ворид шавад, вақте ки навъи нав илова мешавад. | Баланд. Ба осонӣ васеъ мешавад бо илова кардани синфҳои зерии нав. |
| Наследуванӣ | Одатан истифода намешавад ё барои сохтани як синфи фабрика истифода мешавад. | Ба насле асос ёфтааст барои муайян кардани он ки кадом объект бояд эҷод шавад. |
| Сатҳи абстраксия | Камтар абстрактӣ. | Бештар абстрактӣ. |
| Ҳадаф | Эҷоди марказонидашудаи объектҳо. | Ворид кардани эҷоди объектҳоро ба синфҳои зерӣ. |