Gerçek dünya senaryosu :
Varsayılım ki iki çeşit giysimiz olsun t-shirt ve pantalon. Giysilerin iki farklı renk sahip olması durumunda 2 farklı varyanta sahip olan t-shirt ve pantalon olması bekleriz aşağıdaki gibi :
(Figure 1)
Yukarıdaki gibi gereksiz nesne yaratma karmaşasından kurtulmak için T-Shirt ve Pantalon nesneleri sadece içerisine bir özellik olarak alabileceği Kırmızı ve Beyaz nesne tipleri yaratılır, yani bridge tasarım kalıbından yararlanırsak aşağıdaki halde nesnelerimiz olur :
(Figure 2 Bridge)
Bridge tasarım kalıbının mottosu "composition over inheritance"dır. Örneğimizdeki anlamı ise Giysi nesnelerinin içerisine Renk nesnesi alır ve istediğimiz özelliği Giyim nesnelerine bu şekilde ekleyebiliriz.Böylelikle istediğimiz kadar renk ekleyip T-Shirt ve Pantalon nesnelerine de dokunmadan da haraket edebiliriz.
Figure 1 implemantasyonu :
// Base class public class Giyim { public string Beden { get; set; } public virtual void BilgiYaz() { Console.WriteLine($"Renk: {Renk}, Beden: {Beden}"); } } // Derived class - TShirt public class TShirt : Giyim { public override void BilgiYaz() { Console.WriteLine($"T-Shirt Beden: {Beden}"); } } // Derived class - Pantalon public class Pantalon : Giyim { public override void BilgiYaz() { Console.WriteLine($"Pantalon -> Beden: {Beden}"); } } // Specific TShirt types public class BeyazTShirt : TShirt { public string Renk { get; set; } public BeyazTShirt() { Renk = "Beyaz"; } } public class KirmiziTShirt : TShirt { public string Renk { get; set; } public KirmiziTShirt() { Renk = "Kırmızı"; } } // Specific Pantalon types public class BeyazPantalon : Pantalon { public string Renk { get; set; } public BeyazPantalon() { Renk = "Beyaz"; } } public class KirmiziPantalon : Pantalon { public string Renk { get; set; } public KirmiziPantalon() { Renk = "Kırmızı"; } }
Figure 2 Bridge, Bridge pattern uygulanmış hali :
public interface IRenk { string RenkAdi { get; } } public class Beyaz : IRenk { public string RenkAdi => "Beyaz"; } public class Kirmizi : IRenk { public string RenkAdi => "Kırmızı"; } public abstract class Giyim { public string Beden { get; set; } public abstract void BilgiYaz(); } public class TShirt : Giyim { private IRenk renk; public TShirt(IRenk renk) { this.renk = renk; } public override void BilgiYaz() { Console.WriteLine($"T-Shirt -> Renk: {renk.RenkAdi}, Beden: {Beden}"); } } public class Pantalon : Giyim { private IRenk renk; public Pantalon(IRenk renk) { this.renk = renk; } public override void BilgiYaz() { Console.WriteLine($"Pantalon -> Renk: {renk.RenkAdi}, Beden: {Beden}"); } } class Program { static void Main(string[] args) { Giyim tshirt1 = new TShirt(new Beyaz()) { Beden = "M" }; Giyim tshirt2 = new TShirt(new Kirmizi()) { Beden = "L" }; Giyim pantalon1 = new Pantalon(new Beyaz()) { Beden = "32" }; Giyim pantalon2 = new Pantalon(new Kirmizi()) { Beden = "34" }; tshirt1.BilgiYaz(); tshirt2.BilgiYaz(); pantalon1.BilgiYaz(); pantalon2.BilgiYaz(); } }
Top comments (0)