2 Ağu 2015

Abstract Factory Pattern

Author: strongsoul | Filed under: Teknik

Abstract Factory Pattern factory method patternden soyutlama bazında bir level daha yüksektir. İstemcinin ihtiyacı olan aralarında ilişkili nesnelerin üretiminden sorumlu soyut fabrikaların tasarlanmasında ön plana çıkmaktadır.

Aşağıda basit bir örneğini sunduğum bu üretimsel tasarım deseninde ham haldeki bir poğça pişirme üretim standını peynirli yada zeytinli üretimi yapacak  şekilde geliştirip, poğça fabrikasında isteğe göre üretimi gerçekleştirmesi için çalışır hale getireceğiz.

(Evet Benim için poğaça değil poğça dır poğça kalacaktır 🙂 )

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractFactoryPattern
{
    public abstract class PogcaHamuru
    {
        public abstract bool hamuruAc();
        public abstract bool malzemeyiDoldur();
    }
    public abstract class PisirmeIslemi
    {
        public abstract void firinla();
    }
    public class PeynirliPogca : PogcaHamuru
    {
        public override bool hamuruAc()
        {
            Console.WriteLine("Peynirli Pogca hamuru acildi");
            return true;
        }

        public override bool malzemeyiDoldur()
        {
            Console.WriteLine("Peynirli Pogca malzemesi eklendi");
            return true;
        }
    }
    public class ZeytinliPogca : PogcaHamuru
    {
        public override bool hamuruAc()
        {
            Console.WriteLine("Zeytinli Pogca hamuru acildi");
            return true;
        }

        public override bool malzemeyiDoldur()
        {
            Console.WriteLine("Zeytinli Pogca malzemesi eklendi");
            return true;
        }
    }

    public class PeynirliPogcaPisir : PisirmeIslemi
    {
        public override void firinla()
        {
            Console.WriteLine("Peynirli Pogca Pişirildi");
        }
    }

    public class ZeytinliPogcaPisir : PisirmeIslemi
    {
        public override void firinla()
        {
            Console.WriteLine("Zeytinli Pogca Pişirildi");
        }
    }

    public abstract class PogcaFabrikasi
    {
        public abstract PogcaHamuru PogcaYap();
        public abstract PisirmeIslemi PogcaPisir();
    }

    public class ZeytinliPogcaFabrikasi : PogcaFabrikasi
    {
        public override PogcaHamuru PogcaYap()
        {
            return new ZeytinliPogca();
        }

        public override PisirmeIslemi PogcaPisir()
        {
            return new ZeytinliPogcaPisir();
        }
    }

    public class PeynirliPogcaFabrikasi : PogcaFabrikasi
    {
        public override PogcaHamuru PogcaYap()
        {
            return new PeynirliPogca();
        }

        public override PisirmeIslemi PogcaPisir()
        {
            return new PeynirliPogcaPisir();
        }
    }

    public class Fabrika
    {
        private PogcaFabrikasi pogcaFabrikasi;
        private PogcaHamuru pogcaHamuru;
        private PisirmeIslemi pisirmeIslemi;

        public Fabrika(PogcaFabrikasi refPogcaFabrikasi)
        {
            pogcaFabrikasi = refPogcaFabrikasi;
            pogcaHamuru = refPogcaFabrikasi.PogcaYap();
            pisirmeIslemi = refPogcaFabrikasi.PogcaPisir();
        }

        public void uretimiBaslat()
        {
            pogcaHamuru.hamuruAc();
            pogcaHamuru.malzemeyiDoldur();
            pisirmeIslemi.firinla();
        }
    }



    class Program
    {
        static void Main(string[] args)
        {
            Fabrika fabrika = new Fabrika(new PeynirliPogcaFabrikasi());
            fabrika.uretimiBaslat();

            Console.WriteLine("---------------");

            fabrika = new Fabrika(new ZeytinliPogcaFabrikasi());
            fabrika.uretimiBaslat();
        }
    }
}

 

cikti

UML Şeması
uml

Yorum Bırakın