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) |
|---|---|---|
| პასუხისმგებლობა | ერთი კლასი ან სტატიკური ფუნქცია ქმნის ობიექტებს. | ქვესახეები განსაზღვრავენ, რომელი კლასი უნდა ინსტანცირდეს. |
| მოქნილობა | შეზღუდული. საჭიროებს ცვლილებებს ფაბრიკის კლასში ახალი ტიპის დამატებისას. | მაღალი. ადვილად გაფართოებადი ახალი ქვესახეების დამატებით. |
| მემკვიდრეობა | ჩვეულებრივ არ გამოიყენება ან გამოიყენება ერთ ფაბრიკის შექმნისთვის. | მემკვიდრეობაზეა დაფუძნებული, რათა განსაზღვროს, რომელი კლასი უნდა შექმნას. |
| აბსტრაქტული დონე | ნაკლებად აბსტრაქტული. | უფრო აბსტრაქტული. |
| მიზანი | ობიექტების ცენტრალიზებული შექმნა. | შექმნის პროცესის გადაცემა ქვესახეებზე. |