1. 程式人生 > 實用技巧 >設計模式-橋接模式Bridge

設計模式-橋接模式Bridge

橋接模式

Bridge模式基於類的最小設計原則,通過使用封裝繼承聚合讓不同類承擔不同的職責。適合解決多層繼承帶來的類個數膨脹問題,通過繼承和聚合優化優化多層繼承結構。

例如:如果通過繼承來實現5種不同顏色3種不同大小的筆,則需要15種具體的實現類,但是通過橋接模式則只需要8種: UML類圖如下所示:

可以看到三種不同大小的筆分別繼承他們的父類Pen,而他們父類聚合了Color介面,於是三種不同大小的筆可以聚合該介面的實現類,即一共五種顏色,此時一共需要8種不同的實現類。

程式碼示例

//抽象類
public abstract class Pen
{
    protected Color color;
    public void setColor(Color color)
    {
        this.color=color;
    }
    public abstract void draw(String name);
}

//擴充抽象類
public class SmallPen extends Pen
{
    public void draw(String name)
    {
        String penType="小號毛筆繪製";
        this.color.bepaint(penType,name);
    }
}

//擴充抽象類
public class MiddlePen extends Pen
{
    public void draw(String name)
    {
        String penType="中號毛筆繪製";
        this.color.bepaint(penType,name);
    }
}

//擴充抽象類
public class BigPen extends Pen
{
    public void draw(String name)
    {
        String penType="大號毛筆繪製";
        this.color.bepaint(penType,name);
    }
}

//實現類介面
public interface Color
{
    void bepaint(String penType,String name);
}

//擴充實現類
public class Red implements Color
{
    public void bepaint(String penType,String name)
    {
        System.out.println(penType + "紅色的"+ name + ".");
    }
}

//擴充實現類
public class Green implements Color
{
    public void bepaint(String penType,String name)
    {
        System.out.println(penType + "綠色的"+ name + ".");
    }
}

//擴充實現類
public class Blue implements Color
{
    public void bepaint(String penType,String name)
    {
        System.out.println(penType + "藍色的"+ name + ".");
    }
}

//擴充實現類
public class White implements Color
{
    public void bepaint(String penType,String name)
    {
        System.out.println(penType + "白色的"+ name + ".");
    }
}

//擴充實現類
public class Black implements Color
{
    public void bepaint(String penType,String name)
    {
        System.out.println(penType + "黑色的"+ name + ".");
    }
}