Merhaba arkadaşlar,
Bugün tasarım desenleri serimizde bölüm 4 olan Prototype Pattern’ini inceleyeceğiz. Klasik olarak önce patterni anlatmaya çalışacağız daha sonrada örnekle pekiştireceğiz.
Prototype pattern, Creational Patterns altında yani nesnenin oluşması ile ilgili olan tasarım desenlerinde yer alır. Dofactory.com’a göre orta seviye kullanım sıklığı bulunmaktadır. Kısaca nesnenin bir prototipten kopyalanarak oluşmasını sağlar. Peki bu pattern neden kullanılır?
Prototype pattern genel olarak nesnelerin üretim maliyetini azaltarak, geliştirme ve performans kriterlerinde avantaj sağlamak için kullanılır.
Shallow Copy ve Deep Copy olmak üzere iki tür nesne kopyalama işlemi bulunmaktadır. Bunlardan kısaca bahsetmek gerekirse ;
Shallow Copy : Yeni bir nesne üretilmemekte, nesnenin bellekteki referansı üzerinden işlem yapılmaktadır.
Deep Copy : Nesne birebir kopyalanmakta ve farklı referanslar üzerinden işlem yapılabilmektedir.
Gelelim patternimizin UML diyagramına;
Prototype: Nesnenin kopyalanmasını sağlayan Clone metodunu barındıran soyut sınıf.
ConcretePrototype: Patternnin uygulanacağı nesnelerdir.
Client: Patternin kullanımını talep edecek istemci.
Şimdi bunu somut bir örnekle pekiştirelim. Örneğimizde takım nesnemizi Prototype Pattern kullanarak üreteceğiz.
public interface ITeam //Prototype interface { ITeam Clone(); string GetTeamInfo(); }
public class Team:ITeam //ConcretePrototype class { public Team() { TeamId=Guid.NewGuid(); } public Guid TeamId { get;} public string TeamName { get; set; } public string StadiumName { get; set; } public ITeam Clone() { return (ITeam)MemberwiseClone(); } public string GetTeamInfo() { return string.Format("Team Id : {0} , Team Name : {1} , Stadium Name : {2}",TeamId,TeamName,StadiumName); } }
class Program { static void Main(string[] args)//Client { Team teamBesiktas=new Team{ TeamName="Beşiktaş", StadiumName="Vodafone Park" }; Team copyTeamJuventus=(Team)teamBesiktas.Clone(); copyTeamJuventus.TeamName= "Juventus"; copyTeamJuventus.StadiumName="Allianz Stadium"; Console.WriteLine(teamBesiktas.GetTeamInfo()); Console.WriteLine(copyTeamJuventus.GetTeamInfo()); } }
Evet arkadaşlar bu hafta size Prototype Patternini anlatmaya çalıştım. Umarım faydalı olmuştur.
Herkesin Ramazan ayını kutlarım kalın sağlıcakla… 😀
Kaynak Kod => https://github.com/EnesAys/DesignPatterns
Kaynaklar
https://www.dofactory.com/net/prototype-design-pattern
https://www.gencayyildiz.com/blog/c-prototype-design-pattern-prototip-tasarim-deseni/
https://refactoring.guru/design-patterns/prototype/csharp/example
https://www.dotnettricks.com/learn/designpatterns/prototype-design-pattern-dotnet