tasarım desenleri logo

Abstract Factory(Soyut Fabrika) Tasarım Deseni

Merhaba arkadaşlar, daha önceki yazımda Fabrika tasarım desenini anlatmıştım. Bu yazımda ise Soyut Fabrika tasarım desenine göz atacağız.

Soyut Fabrika, Fabrika Metodu modeline benzer, yaratıcı bir kalıptır ve temel fark, Soyut Fabrika’nın, ilgili sınıflarını veya bağımlı nesnelerin örneklerini somut sınıflarını belirtmeden oluşturmak için bir arayüz sağlamasıdır.

Tasarımlar genellikle Fabrika Yöntemi kullanılarak başlar ve daha fazla esnekliğe ihtiyaç duyuldukça Soyut Fabrika’ya doğru gelişir.

Örnek olarak, web tabanlı bir mağaza için öğelerin paketlenmesine ve teslimatına yardımcı olan bir program ele alalım. Şirket iki ürün sunmaktadır. Birincisi basit bir kargo poşeti ve etiket ile teslim edilen ürün, diğeri ise olası ihtimallere karşı darbeye dayanıklı ambalaj gerektiren ve taşınması hakkında detaylı bilgiler bulunan, kurye ile teslim edilmesi gereken hassas bir ürün olsun.

Bu durumlar için ele alalım. İki tür nesne gerekir; bir paketleme nesnesi ve bir teslimat etiketi(dökümanı) nesnesi. Bu ilgili nesneleri üretmek için iki fabrika kullanabiliriz. StandartSatınAlmaFabrikası StandartAmbalajlama ve PostaEtiketi nesnelerini üretirken, HassasSatınAlmaFabrikası ise DarbeyeDayanıklıAmbalajlama ve DetaylıEtiket nesnelerini oluşturmaktadır.

Buyurun Kodları

    class Program
    {
        static void Main(string[] args)
        {

        }
    }

    public class Musteri
    {
        private Paketleme _paketleme;
        private TeslimatBelgesi _teslimatBelgesi;

        public Musteri(SatinAlmaFabrikasi fabrika)
        {
            _paketleme = fabrika.PaketHazirla();
        }

        public Paketleme MusteriAmbalaji
        {
            get { return _paketleme; }
        }

        public TeslimatBelgesi MusteriBelgesi
        {
            get { return _teslimatBelgesi; }
        }
    }

    public abstract class SatinAlmaFabrikasi
    {
        public abstract Paketleme PaketHazirla();
        public abstract TeslimatBelgesi TeslimatBelgesiHazirla();
    }

    public class StandartSatinAlmaFabrikasi : SatinAlmaFabrikasi
    {
        public override Paketleme PaketHazirla()
        {
            return new StandartPaketleme();
        }

        public override TeslimatBelgesi TeslimatBelgesiHazirla()
        {
            return new PostaEtiketi();
        }
    }
    public class HassasSatinAlmaFabrikasi : SatinAlmaFabrikasi
    {
        public override Paketleme PaketHazirla()
        {
            return new DarbeyeDayanikliAmbalaj();
        }

        public override TeslimatBelgesi TeslimatBelgesiHazirla()
        {
            return new DetayliTeslimatBelgesi();
        }
    }
    public abstract class Paketleme { }
    public class StandartPaketleme : Paketleme { }
    public class DarbeyeDayanikliAmbalaj : Paketleme { }
    public abstract class TeslimatBelgesi { }
    public class PostaEtiketi : TeslimatBelgesi { }
    public class DetayliTeslimatBelgesi : TeslimatBelgesi { }

Umarım anlaşılır olmuştur. Kod örneğini de incelerseniz anlayacağınıza şüphem yok.

Bunlara Göz Atmak İsteyebilirsiniz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir