9.設計模式-橋接模式

^胖胖貓^發表於2020-10-26

所謂橋接模式即為搭建中間關係的一種模式。舉個網上比較流行的例子。如果我們要畫一種畫,需要大中小三種筆,紅,藍,黃,綠,紫五種顏色。那如果我是準備彩筆的話,我得準備多少支筆呢?我得準備3*5=15種吧。也就是大的需要準備五種顏色的筆,中的也要準備五種顏色的筆,小的也要準備五種顏色的筆。但如果我用毛筆+墨硯呢?那隻需要3支筆,5種顏色的墨硯,我大的畫完一種顏色,洗了,又塗抹另外一種顏色畫。這樣就只需要3+5=8個材料。造成第一種需要15中材料的原因是什麼呢?就是因為筆本身和顏色本身耦合在一起了。這個在程式碼中就說明了類和其實現的功能耦合在一起了。那麼為了解耦,我們只需要進行一個引用,就達到了拆分的目的。

定義一個color介面

public interface Color {
    void drawColor();
}

定義其實現

public class GreenColor implements Color {
    @Override
    public void drawColor() {
        System.out.println("我能畫綠色");
    }
}
public class BlackColor implements Color {
    @Override
    public void drawColor() {
        System.out.println("我能畫黑色");
    }
}
public class RedColor implements Color {
    @Override
    public void drawColor() {
        System.out.println("我能畫紅色.....");
    }
}

定義一個筆的抽象類

在抽象類裡面引用顏色介面,供實現類不同的呼叫方法。

public abstract class Pen {
    public Color color;
    public void setColor(Color color){
        this.color=color;
    }
    public abstract void draw();
}
public class BigPen extends Pen {
    @Override
    public void draw() {
        System.out.println("我是一支大筆");
        color.drawColor();
    }
}
public class MidPen extends Pen {
    @Override
    public void draw() {
        System.out.println("我是一支中性筆");
        color.drawColor();
    }
}
public class SmallPen extends Pen{
    @Override
    public void draw() {
        System.out.println("我是一支小筆");
        color.drawColor();
    }
}
public class MainTest {
    public static void main(String[] args) {
        Pen pen = new BigPen();
        Color redColor  = new RedColor();
        Color blackColor = new BlackColor();
        pen.setColor(redColor);
        pen.draw();
        System.out.println("............");
        pen.setColor(blackColor);
        pen.draw();

    }
}
我是一支大筆
我能畫紅色.....
............
我是一支大筆
我能畫黑色

相關文章