Middle
'Fabrika' naqsh va 'fabrika usuli' o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Shablon "Fabrika" (Simple Factory) javob beradi bir xil turdagi obyektlarni yaratish, ularning instansiyalash logikasini yashirish. Bu alohida sinf yoki statik funktsiya bo'lib, kirish parametrlariga asoslangan holda aniq obyektni yaratadi va qaytaradi.
<?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("Noto'g'ri mahsulot turi");
}
}
}
"Fabrika usuli" (Factory Method) dizayn modeli, obyekt yaratish uchun interfeysni belgilaydigan va subklasslarga qaysi sinfni instansiyalashni hal qilish imkonini beradigan yaratilish dizaynidir. U obyektlarni yaratish masuliyatini subklasslarga o'tkazadi.
<?php
interface Product
{
public function operation(): string;
}
class ConcreteProductA implements Product
{
public function operation(): string
{
return "ConcreteProductA natijasi";
}
}
class ConcreteProductB implements Product
{
public function operation(): string
{
return "ConcreteProductB natijasi";
}
}
abstract class Creator
{
abstract public function factoryMethod(): Product;
public function someOperation(): string
{
// Fabrika metodini chaqirish orqali Product obyektini yaratish.
$product = $this->factoryMethod();
// Endi, mahsulotdan foydalaning.
return "Yaratuvchi: Xuddi shunday yozuvchi " . $product->operation() . " bilan ishladi";
}
}
class ConcreteCreatorA extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductB();
}
}
Asosiy farq quyidagicha:
| Xususiyat | "Fabrika" (Simple Factory) | "Fabrika usuli" (Factory Method) |
|---|---|---|
| Mas'uliyat | Bir sinf yoki statik funktsiya obyektlarni yaratadi. | Subklasslar qaysi sinfni yaratishni belgilaydi. |
| Moslashuvchanlik | Cheklangan. Yangi mahsulot turini qo'shishda fabrika sinfini o'zgartirish talab qilinadi. | Yuqori. Yangi subklasslar qo'shish orqali osongina kengaytiriladi. |
| Meros olish | Odatda ishlatilmaydi yoki faqat bitta fabrika uchun ishlatiladi. | Meros olishga asoslangan, qaysi obyektni yaratishni belgilash uchun. |
| Abstraktsiya darajasi | Kamroq abstrakt. | Ko'proq abstrakt. |
| Maqsad | Ob'ektlarni markaziy yaratish. | Ob'ekt yaratishni subklasslarga topshirish. |