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)