KMRT BSRN

"Hiç kimsenin ilgisine ihtiyaç duymadığın gün olgunlaşırsın. Hiç kimseden beklentiye girmediğin gün yara almazsın. Ve hiç kimseye bağımlı kalmazsan kazanırsın." OSHO

Design Patterns – Factory Method

Yorum bırakın


İstemci için gerekli nesne üretimini istemciden soyutlamak amacıyla kullanılır. Bir abstract ya da normal sınıf metodu tarafından nesne üretilir. Aşağıdaki kod örneğinde bu teknik kullanılmış ve daha ileri götürülerek Generic tiplerden faydalanılmıştır.

 

ClassDiagram1

 

Factory Method
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Reflection;
  6. using System.Diagnostics;
  7.  
  8. namespace FactoryMethod
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.  
  15.             // Yonetici tipince yonetici nesne olusturulur ve onun kurallarina gore nesneler yonetilir.
  16.             Yonetici yonetici = new Creator<Yonetici>().CreateObject();
  17.             yonetici.Yonet(new Creator<Kisi>().CreateObject());
  18.             yonetici.Yonet(new Creator<Calisan>().CreateObject());
  19.             yonetici.Yonet(new Creator<Robot>().CreateObject());
  20.             yonetici.Yonet(new Creator<Hayvan>().CreateObject());
  21.  
  22.  
  23.             Console.WriteLine();
  24.             Console.WriteLine();
  25.  
  26.  
  27.             // Yonetici2 tipince yonetici nesne olusturulur ve onun kurallarina gore nesneler yonetilir.
  28.             Yonetici2 yonetici2 = new Creator<Yonetici2>().CreateObject();
  29.             yonetici2.Yonet(new Creator<Kisi>().CreateObject());
  30.             yonetici2.Yonet(new Creator<Calisan>().CreateObject());
  31.             yonetici2.Yonet(new Creator<Robot>().CreateObject());
  32.             yonetici2.Yonet(new Creator<Hayvan>().CreateObject());
  33.  
  34.  
  35.             Console.WriteLine();
  36.             Console.WriteLine();
  37.  
  38.  
  39.             // Yonetici3 tipince yonetici nesne olusturulur ve onun kurallarina gore nesneler yonetilir.
  40.             Yonetici3 yonetici3 = new Creator<Yonetici3>().CreateObject();
  41.             yonetici3.Yonet(new Creator<Kisi>().CreateObject());
  42.             yonetici3.Yonet(new Creator<Calisan>().CreateObject());
  43.             yonetici3.Yonet(new Creator<Robot>().CreateObject());
  44.             yonetici3.Yonet(new Creator<Hayvan>().CreateObject());
  45.  
  46.  
  47.             Console.ReadKey();
  48.         }
  49.     }
  50.  
  51.     interface IYonet
  52.     {
  53.         void Yonetil();
  54.     }
  55.  
  56.     class Kisi : IYonet
  57.     {
  58.         public string Ad { get; set; }
  59.         public string Soyad { get; set; }
  60.  
  61.         public Kisi()
  62.         {
  63.             Ad = "Murat";
  64.             Soyad = "Baseren";
  65.         }
  66.  
  67.         public virtual void Yonetil()
  68.         {
  69.             Console.WriteLine(Ad + " " + Soyad + " adli kisi yonetiliyor.");
  70.         }
  71.     }
  72.     class Calisan : Kisi
  73.     {
  74.         public string Unvan { get; set; }
  75.  
  76.         public Calisan()
  77.             : base()
  78.         {
  79.             Unvan = "Prof";
  80.         }
  81.  
  82.         public override void Yonetil()
  83.         {
  84.             Console.WriteLine(Unvan + "-" + Ad + " " + Soyad + " adli calisan yonetiliyor.");
  85.         }
  86.     }
  87.     class Robot : IYonet
  88.     {
  89.         public string Description { get; set; }
  90.  
  91.         public Robot()
  92.         {
  93.             Description = "K981";
  94.         }
  95.  
  96.         public void Yonetil()
  97.         {
  98.             Console.WriteLine(Description + " model robot yonetiliyor.");
  99.         }
  100.     }
  101.     class Hayvan : IYonet
  102.     {
  103.         public string Ad { get; set; }
  104.  
  105.         public Hayvan()
  106.         {
  107.             Ad = "Findik";
  108.         }
  109.  
  110.         public void Yonetil()
  111.         {
  112.             Console.WriteLine(Ad + " isimli hayvan yontiliyor.");
  113.         }
  114.     }
  115.  
  116.  
  117.     interface IYonetici
  118.     {
  119.         void Yonet(IYonet yonetilen);
  120.     }
  121.  
  122.     class Yonetici : IYonetici
  123.     {
  124.         public void Yonet(IYonet yonetilen)
  125.         {
  126.             yonetilen.Yonetil();
  127.         }
  128.     }
  129.     class Yonetici2 : IYonetici
  130.     {
  131.         public void Yonet(IYonet yonetilen)
  132.         {
  133.             Console.WriteLine("Yonetme islemi hazirlaniyor..");
  134.             yonetilen.Yonetil();
  135.         }
  136.     }
  137.     class Yonetici3 : IYonetici
  138.     {
  139.         public void Yonet(IYonet yonetilen)
  140.         {
  141.             Console.WriteLine("Yonetme islemi hazirlaniyor..");
  142.             yonetilen.Yonetil();
  143.             Console.WriteLine("Yonetme islemi bitti..");
  144.         }
  145.     }
  146.  
  147.     class Creator<T>
  148.     {
  149.  
  150.         private void DebugWriteline(string msg)
  151.         {
  152.             Debug.WriteLine(msg);
  153.         }
  154.  
  155.         public T CreateObject()
  156.         {
  157.             // nesne olu?madan ?nce i?lem yapmak istenirse kodlan?r..
  158.             DebugWriteline(typeof(T).FullName + " tipinde nesne olusturulacak.");
  159.  
  160.             Assembly asm = Assembly.GetAssembly(typeof(T));
  161.             T obj = (T)asm.CreateInstance(typeof(T).FullName);
  162.  
  163.             // nesne olu?tuktan sonra i?lem yapmak istenirse kodlan?r..
  164.             DebugWriteline(obj.GetType().FullName + " tipinde nesne olusturuldu.\n\n");
  165.  
  166.             return obj;
  167.         }
  168.     }
  169. }

Reklamlar

Yazar: K. Murat BAŞEREN, MBA, MCP

I am a senior software developer, MCP, consultant, blogger, former chemist and software trainer. My interests range from software developer to technology. I am also interested in web development, education, and coffee.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s