Sobes.tech
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)
Ευθύνη Ένα κλάση ή στατική λειτουργία δημιουργεί αντικείμενα. Οι υποκλάσεις καθορίζουν τον τύπο του αντικειμένου που δημιουργείται.
Ευελιξία Περιορισμένη. Απαιτεί αλλαγές στην κλάση εργοστασίου κατά την προσθήκη νέου τύπου προϊόντος. Υψηλή. Επεκτείνεται εύκολα με την προσθήκη νέων υποκλάσεων-δημιουργών.
Κληρονομικότητα Συνήθως όχι χρησιμοποιείται ή χρησιμοποιείται για τη δημιουργία μιας εργοστασιακής κλάσης. Βασίζεται στην κληρονομικότητα για τον καθορισμό του τύπου του αντικειμένου που δημιουργείται.
Επίπεδο αφαιρετικότητας Λιγότερο αφαιρετικό. Πιο αφαιρετικό.
Στόχος Κεντρική δημιουργία αντικειμένων. Ανάθεση της δημιουργίας αντικειμένων σε υποκλάσεις.