DEV Community

MustafaSamedYeyin
MustafaSamedYeyin

Posted on

🚡 Bridge

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ı";
    }
}
Enter fullscreen mode Exit fullscreen mode

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();
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)