Factory Method Pattern

[en] Read in English

2023-05-26

Bir zamanlar, büyülü bir krallık vardı ve bu krallığın adı “Factory Method"du. Bu krallık, nesnelerin oluşturulmasını denetleyen bir yerdi. Krallığın en bilge hükümdarı, nesnelerin yaratılmasının kendi özel yolları olduğunu düşünüyordu ve bu, onun yönetiminin bir parçasıydı.

Hükümdarın bir prensesi vardı ve adı “Creator"di. Creator, her gün yeni bir nesne oluşturmak için sihirli güçlerini kullanırdı. Ancak Creator, her zaman aynı türde bir nesne yaratmazdı. Bazı günler bir “ProductA” yaratırken, bazı günler ise “ProductB” yaratırdı. Her bir ürünün oluşturulma şekli biraz farklıydı ve bu yüzden Creator’ın her birini ayrı ayrı oluşturması gerekiyordu.

C# dilinde bu hikaye şu şekilde uygulanır:

public abstract class Creator
{
    public abstract IProduct FactoryMethod();
}

public class ConcreteCreatorA : Creator
{
    public override IProduct FactoryMethod()
    {
        return new ConcreteProductA();
    }
}

public class ConcreteCreatorB : Creator
{
    public override IProduct FactoryMethod()
    {
        return new ConcreteProductB();
    }
}

Java dilinde aynı hikaye:

public abstract class Creator {
    public abstract Product factoryMethod();
}

public class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

public class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}

Python dilinde:

from abc import ABC, abstractmethod

class Creator(ABC):
    @abstractmethod
    def factory_method(self):
        pass

class ConcreteCreatorA(Creator):
    def factory_method(self):
        return ConcreteProductA()

class ConcreteCreatorB(Creator):
    def factory_method(self):
        return ConcreteProductB()

Go dilinde bu hikaye:

type Creator interface {
	FactoryMethod() Product
}

type ConcreteCreatorA struct{}

func (c ConcreteCreatorA) FactoryMethod() Product {
	return &ConcreteProductA{}
}

type ConcreteCreatorB struct{}

func (c ConcreteCreatorB) FactoryMethod() Product {
	return &ConcreteProductB{}
}

Rust dilinde bu hikaye:

pub trait Creator {
    fn factory_method(&self) -> Box<dyn Product>;
}

pub struct ConcreteCreatorA;

impl Creator for ConcreteCreatorA {
    fn factory_method(&self) -> Box<dyn Product> {
        Box::new(ConcreteProductA)
    }
}

pub struct ConcreteCreatorB;

impl Creator for ConcreteCreatorB {
    fn factory_method(&self) -> Box<dyn Product> {
        Box::new(ConcreteProductB)
    }
}

Ve böylece, Factory Method krallığında yaşayanlar, Creator’ın nesneleri nasıl yarattığını gördüler. Her Creator, belirli bir ürün tipini oluşturma yeteneğine sahiptir ve bu, kodun daha düzenli, anlaşılır ve esnek olmasını sağlar.

Her yeni ürün tipi için, yeni bir Creator oluşturabiliriz ve bu, Creator’ın yaratıcılık yeteneklerini genişletecektir. Bu hikaye, Factory Method tasarım kalıbının nasıl çalıştığını ve nasıl kullanılacağını gösterir. Bu kalıp, nesnelerin oluşturulmasını denetler ve kodun bakımını ve genişletilebilirliğini kolaylaştırır.



Bu gibi daha fazla gönderi...

Bileşenlerin Dansı: Composite Tasarım Kalıbı

2023-06-22 | #composite-pattern #design-patterns #structural-patterns

Bir zamanlar, bir ormanda bir ağaç vardı. Bu ağaç, yaprakları ve dalları olan karmaşık bir yapıydı. Her dalın üzerinde daha küçük dallar ve yapraklar bulunabilirdi. Ağaç, dallarını ve yapraklarını bir arada tutan bir bütün olarak çalışıyordu. Bu ağaç, Composite tasarım kalıbının bir örneğidir. Ağaç (Composite), dallar (yine Composite) ve yapraklar (Leaf) olmak üzere iki tür bileşen içerir. Hem dallar hem de yapraklar, ağaç tarafından tanınan aynı arayüzü (Component) uygular. Bu sayede ağaç, dallarını ve yapraklarını aynı şekilde işleyebilir.

Devamı 


Köprüler Kurarak Esneklik Kazanın: Bridge Tasarım Kalıbı İle Çözümlemeler ve Dört Farklı Dilde Uygulamalar

2023-06-22 | #bridge-pattern #design-patterns #structural-patterns

Bir zamanlar, iki krallık varmış. Bu krallıklar birbirlerine çok yakın olmasına rağmen, aralarında geniş ve derin bir nehir bulunuyormuş. Bu nehir, krallıkların birbirleriyle etkileşim kurmasını zorlaştırıyormuş. Bu durumu çözmek için, her iki krallık da bir köprü inşa etmeye karar vermiş. Bu köprü, iki krallık arasında iletişimi sağlayan bir arayüz olmuş. Ancak, köprünün her iki tarafında farklı yapılar ve özellikler bulunuyormuş. Bir taraf taştan, diğer taraf ise ahşaptan yapılmış. Bu durum, köprünün her iki tarafının birbirinden bağımsız olarak değiştirilebilmesini sağlamış.

Devamı 


Dekoratör Tasarım Deseni: Yazılımın Süsleyicileri

2023-06-15 | #decorator-pattern #design-patterns #structural-patterns

Bir zamanlar, bir “Component” adında bir nesne varmış. Bu nesne, belirli bir işlevi yerine getirmek için kullanılırmış. Ancak, bazen bu işlevi genişletmek veya değiştirmek gerekiyormuş. İşte bu noktada “Decorator"lar devreye giriyormuş. Decorator’lar, Component’i “süsleyen” veya genişleten nesnelerdir. Bir Decorator, bir Component’in üzerine gelir ve onun işlevini genişletir veya değiştirir. Bu, Component’in kendisini değiştirmeden, onun işlevselliğini genişletmek için kullanılır. Örneğin, bir “TextComponent” düşünün. Bu component, bir metni ekrana yazdırır. Ancak, bazen metni kalın veya italik yapmak isteyebiliriz.

Devamı 