Merhaba arkadaşlar,
Bir süre önce ” Nedir Bu Tasarım Desenleri ? “ yazısında yüzeysel ve teorik olarak bahsettiğim desenleri, bir seri olacak şekilde detaylandırmaya ve örneklerle anlatmaya çalışacağım.
Seriye Creational Patterns (Sanırım oluşturucu desenler diyebiliriz 😀 ), altındaki Abstract Factory patterni ile başlayacağım. Daha sonra her bölümde bir Creational Pattern anlatmaya çalışarak devam edeceğim. Yoğunluğa ve içerik planlamama göre Structural Patterns ( Yapısal Desenler ), Behavioral Patterns ( Davranışsal Desenler ) altındaki belli başlı desenleri de aktarmaya çalışabilirim.
Öncelikle Creational Patterns’leri hatırlayarak başlayalım;
Creational Patterns-Kurucu Desenler: Nesnelerin oluşturulması ile ilgili patternlerdir.
- Abstract Factory: İlişkili sınıfların oluşturulmasında kullanılır.
- Factory Method: Birden fazla türetilmiş sınıfın tek bir örneğinin oluşturulmasında kullanılır.
- Builder: Nesne üretilirken belirli özellikler vermemizi sağlayan desendir.
- Prototype: Nesnenin bir prototipten kopyalanarak üretilmesinde kullanılır.
- Singleton: En çok bilinen tasarım desenlerinden biridir. Programın yaşam döngüsü içerisinde bir nesnenin sadece bir kez oluşturulmasında kullanılır.
Şimdi bu bölümün konusu olan ilk patternimiz Abstract Factory patternini incelemeye çalışalım.
Abstract Factory, farklı ürünleri üreten fabrikaların soyutlanması olarak tanımlanabilir. Soyutlama ile beraber daha geliştirilebilir, okunabilir bir kod yapısına ulaşmak ve tekrar eden if-else yapılarından kurtulmak için kullanabiliriz. Öncelikle UML diyagramını görelim, daha sonra da kod örneği ile devam edelim.
Şimdi de takım kavramı ve bu takımlara ait renk ve stadyum adını döndüren Abstract Factory örneğimize bakalım.
public interface Team { string getTeamColor(); string getStadium(); } #region Teams public class Besiktas : Team { public string getStadium() { return "Vodafone Park"; } public string getTeamColor() { return "Black-White"; } } public class RealMadrid : Team { public string getStadium() { return "Santiago Bernabéu"; } public string getTeamColor() { return "White"; } } #endregion #region Factories public interface TeamAbstractFactory { Team createTeam(); } public class BesiktasFactory : TeamAbstractFactory { public Team createTeam() { return new Besiktas(); } } public class RealMadridFactory : TeamAbstractFactory { public Team createTeam() { return new RealMadrid(); } } //Produces team by factory type public class TeamFactory { public static Team getTeam(TeamAbstractFactory factory) { return factory.createTeam(); } } #endregion class Program { static void Main(string[] args) { Team besiktas=TeamFactory.getTeam(new BesiktasFactory()); Team realMadrid=TeamFactory.getTeam(new RealMadridFactory()); Console.WriteLine("Beşiktaş stadium is {0} and color {1}",besiktas.getStadium(),besiktas.getTeamColor()); Console.WriteLine("Real Madrid stadium is {0} and color {1}",realMadrid.getStadium(),realMadrid.getTeamColor()); } }
Kaynak Kod => https://github.com/EnesAys/DesignPatterns
Bir daha ki bölümde görüşmek üzere. Kalın sağlıcakla …
Kaynaklar
https://www.dofactory.com/net/abstract-factory-design-pattern
http://www.codesenior.com/tutorial/Soyut-Fabrika-Abstract-Factory-Tasarim-Deseni
https://kodcu.com/2014/08/design-patterns-1-giris-factory-ve-abstract-factory-tasarim-kaliplari-2/