C# Strategy Pattern Kullanımı - OOP Design Patterns
Bir işi farklı yöntemlerle yapacaksak burada Strategy Pattern'i kullanabiliriz. Örneğin e-commerce bir uygulamamız olduğunu düşünelim. Satışı havale, kredi kartı veya PayPal ile yapabiliyoruz. Burada yapılacak iş kullanıcının parasının sizin hesabınıza geçmesi fakat her ödeme yöntemi için farklı business processler işleyecektir arka planda. Örneğin biri bankaya bağlanıp havale gelmiş mi diye kontrol ederken diğeri PayPal'dan bunu sorguluyor olacaktır.
Kısacası Strategy Pattern aynı işi yapacak birden çok strategy'iniz var ise bunu en iyi şekilde programınıza aktarmanızı sağlar. Bunun için bir Strategy interface'i oluştururuz.Tüm strategy'ler bu interface'den türetilir ve client bu interface'i kullanarak tüm strategy'lere ulaşabilir. Class diagramı üzerinden bu anlattığıma bakarsak daha anlaşılır olacaktır.
Şimdi de bir örnek üzerinden bu pattern'i açıklayalım. Örneğin bir program yazıyoruz. Bu program kullanıcının girdiği değere göre verilen ses dosyasını mp3 veya wma dosyasına çeviriyor. Bunun için önce IStrategy interface'imizi tanımlıyoruz:
interface IStrategy
{
void Convert();
}
Ardından mp3 e ve wma ya çevirim işlemleri yapacak olan strategy sınıflarımızı yaratıyoruz:
class Mp3Converter:IStrategy
{
public void Convert()
{
//Mp3 cevirim islemleri
}
}
class WMAConverter : IStrategy
{
public void Convert()
{
//WMA cevirim islemleri
}
}
Artık aslında strategy pattern'imizi tamamladık. Fakat C# Factory Pattern Kullanımı - OOP Design Patterns yazımda anlattığım nedenlerden dolayı burada bir de factory pattern kullanırsak programımız daha güzel olacaktır. Bu yüzden hemen bir factory class yazalım:
//Burada factory pattern kullandik
public static class ConverterFactory
{
public static IStrategy CreateConverterClass(string choice)
{
IStrategy selectedStrategy = null;
if (choice == "mp3")
{
selectedStrategy = new Mp3Converter();
}
else if (choice == "wma")
{
selectedStrategy = new WMAConverter();
}
return selectedStrategy;
}
}
Böylelikle client tarafının işler kolaylaştı. Artık client'ın aşağıdaki gibi bir kod parçacığı yazması yeterli olacaktır.
static void Main(string[] args)
{
IStrategy selectedStrategy = ConverterFactory.CreateConverterClass("mp3");
selectedStrategy.Convert();
}
Kısacası Strategy Pattern aynı işi yapacak birden çok strategy'iniz var ise bunu en iyi şekilde programınıza aktarmanızı sağlar. Bunun için bir Strategy interface'i oluştururuz.Tüm strategy'ler bu interface'den türetilir ve client bu interface'i kullanarak tüm strategy'lere ulaşabilir. Class diagramı üzerinden bu anlattığıma bakarsak daha anlaşılır olacaktır.
Şimdi de bir örnek üzerinden bu pattern'i açıklayalım. Örneğin bir program yazıyoruz. Bu program kullanıcının girdiği değere göre verilen ses dosyasını mp3 veya wma dosyasına çeviriyor. Bunun için önce IStrategy interface'imizi tanımlıyoruz:
interface IStrategy
{
void Convert();
}
Ardından mp3 e ve wma ya çevirim işlemleri yapacak olan strategy sınıflarımızı yaratıyoruz:
class Mp3Converter:IStrategy
{
public void Convert()
{
//Mp3 cevirim islemleri
}
}
class WMAConverter : IStrategy
{
public void Convert()
{
//WMA cevirim islemleri
}
}
Artık aslında strategy pattern'imizi tamamladık. Fakat C# Factory Pattern Kullanımı - OOP Design Patterns yazımda anlattığım nedenlerden dolayı burada bir de factory pattern kullanırsak programımız daha güzel olacaktır. Bu yüzden hemen bir factory class yazalım:
//Burada factory pattern kullandik
public static class ConverterFactory
{
public static IStrategy CreateConverterClass(string choice)
{
IStrategy selectedStrategy = null;
if (choice == "mp3")
{
selectedStrategy = new Mp3Converter();
}
else if (choice == "wma")
{
selectedStrategy = new WMAConverter();
}
return selectedStrategy;
}
}
Böylelikle client tarafının işler kolaylaştı. Artık client'ın aşağıdaki gibi bir kod parçacığı yazması yeterli olacaktır.
static void Main(string[] args)
{
IStrategy selectedStrategy = ConverterFactory.CreateConverterClass("mp3");
selectedStrategy.Convert();
}
0 yorum :
Yorum Gönder