1. Factory Method Pattern nedir
Factory Method Pattern, alt sınıflarda nesne oluşturma sürecini kapsülleme olanağı sağlayan bir yaratıcı tasarım desenidir. Bu şekilde, istemci, belirli nesne oluşturma süreci hakkında endişelenmeden fabrika yöntemini çağırarak nesneleri yaratabilir.
2. Factory Method Pattern'ın Özellikleri ve Avantajları
Factory Method Pattern'ın özellikleri şunları içerir:
- Nesnelerin oluşturulması ve kullanımının ayrılması, böylece istemci sadece fabrika yöntemine ve soyut ürün arayüzüne dikkat etmelidir.
- Sistem, yeni belirli fabrika sınıfları ve belirli ürün sınıfları ekleyerek Açık/Kapalı Prensibe uyarak genişletilebilir.
Factory Method Pattern'ın avantajları şunları içerir:
- Nesne oluşturma sürecinin kapsülleme, sistemi daha esnek ve genişletilebilir hale getirir.
- Belirli ürün sınıflarının uygulama detaylarını gizleyerek, istemcinin belirli sınıflara bağımlılığını ve bağlılığını azaltır.
- Ürünlerin oluşturulması için standartlaştırılmış bir yol sağlayarak, sistem bakımını ve genişletmesini kolaylaştırır.
3. Factory Method Pattern Uygulama Senaryoları
Factory Method Pattern, aşağıdaki senaryolar için uygundur:
- İstemci, belirli ürün sınıflarına değil, soyut ürün arayüzüne bağımlıdır.
- İstemcinin farklı koşullara bağlı olarak farklı ürün nesneleri dinamik olarak oluşturmasını gerektirir.
- Ürün nesnesi oluşturma sürecini kapsüllenmesi ve gizlenmesi gereklidir.
4. Factory Method Pattern'ın Golang'da Uygulanması
4.1 UML Sınıf Diyagramı
4.2 Uygulama Adımı 1: Soyut Ürün Arayüzünü Tanımlama
package factory
// Product, soyut ürün arayüzüdür
type Product interface {
Operation() string
}
4.3 Uygulama Adımı 2: Somut Ürün Uygulama Sınıflarını Oluşturma
package factory
// ConcreteProductA, somut ürün sınıfı A'dır
type ConcreteProductA struct{}
// Operation, somut ürün A sınıfının yöntemidir
func (p *ConcreteProductA) Operation() string {
return "ConcreteProductA"
}
// ConcreteProductB, somut ürün sınıfı B'dir
type ConcreteProductB struct{}
// Operation, somut ürün B sınıfının yöntemidir
func (p *ConcreteProductB) Operation() string {
return "ConcreteProductB"
}
4.4 Uygulama Adımı 3: Soyut Fabrika Arayüzünü Tanımlama
package factory
// Factory, soyut fabrika arayüzüdür
type Factory interface {
CreateProduct() Product
}
4.5 Uygulama Adımı 4: Somut Fabrika Uygulama Sınıflarını Oluşturma
package factory
// ConcreteFactoryA, somut fabrika sınıfı A'dır
type ConcreteFactoryA struct{}
// CreateProduct, somut fabrika A sınıfının yöntemidir
func (f *ConcreteFactoryA) CreateProduct() Product {
return &ConcreteProductA{}
}
// ConcreteFactoryB, somut fabrika sınıfı B'dir
type ConcreteFactoryB struct{}
// CreateProduct, somut fabrika B sınıfının yöntemidir
func (f *ConcreteFactoryB) CreateProduct() Product {
return &ConcreteProductB{}
}
4.6 Uygulama Adımı 5: İstemci, Fabrika Yöntemini Çağırarak Ürün Nesnelerini Oluşturur
package main
import (
"fmt"
"github.com/your/package/factory"
)
func main() {
// Concrete Factory A oluşturma
factoryA := &factory.ConcreteFactoryA{}
// Fabrika yöntemini çağırarak ürün nesnelerini oluşturur
productA := factoryA.CreateProduct()
fmt.Println(productA.Operation())
// Concrete Factory B oluşturma
factoryB := &factory.ConcreteFactoryB{}
// Fabrika yöntemini çağırarak ürün nesnelerini oluşturur
productB := factoryB.CreateProduct()
fmt.Println(productB.Operation())
}
Yukarıdaki kodda, soyut ürün arayüzü Product
ve somut ürün sınıfları ConcreteProductA
ve ConcreteProductB
tanımlanmıştır. Ardından soyut fabrika arayüzü Factory
ve somut fabrika sınıfları ConcreteFactoryA
ve ConcreteFactoryB
tanımlanmıştır. İstemci, somut fabrika sınıfının fabrika yöntemini çağırarak belirli ürün nesneleri oluşturabilir, böylece Factory Method deseni uygulanmış olur.
Yukarıdaki adımlarla, Factory Method desenini Golang'da uygulamayı tamamladık. Bu yaklaşım, istemciyi belirli ürün sınıflarından ayırarak, istemcinin sadece soyut ürün arayüzüne odaklanmasını sağlar. Aynı zamanda belirli ürün sınıflarının uygulama detayları somut fabrika sınıfında kapsüllenmiş, sistem daha esnek ve genişletilebilir hale getirilmiştir. Factory Method deseni, özellikle farklı tiplerde nesnelerin dinamik oluşturulması gereken senaryolarda pratik uygulamalarda çok yaygın olarak kullanılmaktadır, bu da kodun yeniden kullanılabilirliğini ve bakımını etkili bir şekilde arttırmaktadır.