橋接模式的英文是 Bridge ,橋接模式關注抽象的設計。抽象是指包含了一組抽象方法的類,這些抽象方 法可能包含多個實現。
實現抽象的一般做法是創建類的層次結構,該層次結構的頂部是一個包含抽象 方法的抽象類,該類的每一個子類都提供這些抽象方法的不同實現。但是,當需要對該層次進行子類化時,這 一做法就存在不足了。
你可以創建一個橋,然後把這些抽象方法移到接口中,這樣,抽象就依賴於接 口的實現。
橋接模式的意圖是:將抽象與抽象方法的實現相互分離來實現解耦,以便二者可以相互獨 立的變化。
上面這段話的意思就是說實現與抽象相分離。
下面舉個例子說明:
1.現在 水果裡有 蘋果和橘子
2.人分為 男人和女人
3.人都可以吃水果,所以有 2*2 = 4 中情況
如果我們不用橋接模式,那麼實現這麼多情況就需要一個一個的去實現,也就是4類,那麼我們使用橋 接模式呢?答案是:2類。這在條件和實現比較多的情況下優勢會更明顯。
具體的實現:
下面 首先給出實現的UML圖

實現的代碼和說明如下:
1.Fruit類
package com.brucezhang.bridge;
public abstract class Fruit {
/**
* 抽象方法
* @param People
* */
public abstract void eatFruit(People people);
}
這是一個抽象類,是所有水果的抽象,其中的一個抽象方法是對水果執行的動作,也就是將來我們 需要對水果執行的操作,參數是人。
2.Apple類
package com.brucezhang.bridge;
public class Apple extends Fruit{
@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat apple !");
}
}
3.Oranger類
package com.brucezhang.bridge;
public class Oranger extends Fruit{
@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat oranger !");
}
}
這兩個類都是水果類的具體實現,都代表的具體的東西,其中需要重載水果類中的抽象方法,且各 自都有各自不同的實現。
4.People類
package com.brucezhang.bridge;
public abstract class People {
private String type;
private Fruit fruit;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Fruit getFruit() {
return fruit;
}
public void setFruit(Fruit fruit) {
this.fruit = fruit;
}
//抽象方法
public abstract void eat();
}
這個類是抽象的人,裡面有兩個參數,一個參數是水果,一個參數是類型(代表是男人或是女人)
5.Man類
package com.brucezhang.bridge;
public class Man extends People{
public Man(){
setType("Man");
}
@Override
public void eat() {
// TODO Auto-generated method stub
getFruit().eatFruit(this);
}
}
6.Woman類
package com.brucezhang.bridge;
public class Woman extends People{
public Woman(){
setType("Woman");
}
@Override
public void eat() {
// TODO Auto-generated method stub
getFruit().eatFruit(this);
}
}
這兩個類繼承自People類,是具體的“人”,其中重寫了父類方法,並在構造函數中說明是“什麼 人”
7.測試類--Main_Test
package com.brucezhang.bridge;
public class Main_Test {
public static void main(String[] args) {
People man = new Man();
People woman = new Woman();
Fruit apple = new Apple();
Fruit oranger = new Oranger();
apple.eatFruit(man);
oranger.eatFruit(woman);
apple.eatFruit(woman);
oranger.eatFruit(man);
}
}
這裡是對橋接模式的測試。
程序執行的結果如下:
Man eat apple ! Woman eat oranger ! Woman eat apple ! Man eat oranger !