Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

Interface Extension Method ve Generic Factory Pattern Örneği.

Aşağıda işime yarayan bir kod örneğini paylaşmak istedim.Öncelikle Extension metodlar nedir kısaca ondan bahsedeyim.Net’in varolan sınıflarına yeni bir method eklemek için kullanılan genişletilebilen metodlardır. Örneğin :

string s = "Extension Deneme";
 s.ToLower();
<pre>

Bu örnekte .NET tarafında tanımlı bir extension metodu kullandık. İşte biz de bu şekilde metodlar .net tiplerine veya kendi oluşturduğumuz sınıf tiplerine uygulayabiliriz. Bu kod örneğimizde bir interface ve ondan türeyecek sınıflar için bir extension metod yapacağız . Ayrıca ekstra olarak da Generic Factory Pattern’ini kullanarak sınıfın create edilmesini sağlayacağız. Yani bir örnekte 2 kuş birden.

Generic Factory Pattern de Generic yapıları kullanarak nesnelerin run time da oluşturulmasını sağlayan bir tasarım desenidir. Nesneler recflection yöntemi ile create edilir.


/// <summary>
/// Generic Factory Pattern
/// Software classes, modules, functions etc. should be open for extension, but closed for modification
/// </summary>
public class Factory<T>
{
    private readonly Dictionary<string, Type> _factoryDictionary = new Dictionary<string, Type>();

    public Factory()
    {
        //Assembly içinde T tipinden bulunan bütün sınıflar bulunuyor ve dictionary'e ekleniyor.
        Type[] types = Assembly.GetAssembly(typeof(T)).GetTypes();
        foreach (Type type in types)
        {
            if (!typeof(T).IsAssignableFrom(type) || type == typeof(T))
            {
                continue;
            }
            _factoryDictionary.Add(type.Name, type);
        }
    }

    public T Create<V>(params object[] args)
    {
        return (T)Activator.CreateInstance(_factoryDictionary[typeof(V).Name], args);
    }
}

public static class ExtensionMethods
{
    public static decimal TotalPrices(this IEnumerable<IProduct> productEnum)
    {
        decimal total = 0;
        foreach (IProduct prod in productEnum)
        {
            total += prod.ListPrice;
        }
        return total;
    }
}

public class ShoppingChart : IEnumerable<IProduct>
{
    public List<IProduct> Products { get; set; }

    public IEnumerator<IProduct> GetEnumerator()
    {
        return Products.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

class Program
{
        static void Main(string[] args)
        {
            Factory<IProduct> factory = new Factory<IProduct>();
            factory.Create<Product>(null);
        }
}
Reklamlar

Ekim 8, 2012 - Posted by | C#, Yazılım, İpucu | , , , ,

2 Yorum »

  1. Benim ödevi yapmışsın. :) Daha derin inceleyecem müsait bir zamanda.

    Yorum tarafından semihkirdinli | Ekim 22, 2012 | Cevapla

  2. İyi anlamadığın yer olursa anlatırım sana :)

    Yorum tarafından koraykirdinli | Ekim 22, 2012 | Cevapla


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