Factory Method Design Pattern

Factory Method Design Pattern Python programlama dili ile kullanımı

from abc import ABC, abstractmethod

# Ürün soyut sınıfı
class Product(ABC):
    @abstractmethod
    def operation(self) -> str:
        pass

# İlk ürün sınıfı
class ConcreteProductA(Product):
    def operation(self) -> str:
        return "ConcreteProductA"

# İkinci ürün sınıfı
class ConcreteProductB(Product):
    def operation(self) -> str:
        return "ConcreteProductB"

# Fabrika sınıfı
class Creator(ABC):
    @abstractmethod
    def factory_method(self) -> Product:
        pass

    def some_operation(self) -> str:
        # Ürünleri oluştur ve operasyonları gerçekleştir
        product = self.factory_method()
        result = f"Creator: The same creator's code has just worked with {product.operation()}"

        return result

# İlk fabrika sınıfı
class ConcreteCreatorA(Creator):
    def factory_method(self) -> Product:
        return ConcreteProductA()

# İkinci fabrika sınıfı
class ConcreteCreatorB(Creator):
    def factory_method(self) -> Product:
        return ConcreteProductB()

# Kullanım
if __name__ == "__main__":
    print("Client: Testing client code with the first creator...")
    creator = ConcreteCreatorA()
    print(creator.some_operation())

    print("\n")

    print("Client: Testing the same client code with the second creator...")
    creator = ConcreteCreatorB()
    print(creator.some_operation())

Bu örnekte, Product soyut sınıfı altında iki ürün sınıfı (ConcreteProductA ve ConcreteProductB) oluşturduk. Creator soyut sınıfı altında, ürün nesnesini oluşturmak için kullanılan factory_method() adlı bir soyut yöntem tanımladık. Ardından, her ürün sınıfı için bir ConcreteCreator sınıfı oluşturduk. Son olarak, main işlevinde, her ConcreteCreator nesnesini kullanarak some_operation() yöntemini çağırdık.

Bu örnekte, ConcreteCreatorA nesnesi oluşturulduğunda ConcreteProductA ürününün oluşturulduğunu ve some_operation() yöntemi tarafından işlendiğini görebilirsiniz. Benzer şekilde, ConcreteCreatorB nesnesi oluşturulduğunda ConcreteProductB ürününün oluşturulduğunu ve some_operation() yöntemi tarafından işlendiğini görebilirsiniz.