定義 橋接模式(bridge):將抽象部分與實現部分分離,使它們都可以獨立的變化. 從定義來看,抽象的簡直看不了,那麼通俗點講,我們怎麼理解橋接模式呢? 我們再舉一個例子,假設你是一個地主,你有兩個管家,兩個工人,那麼每天你怎麼指揮他們呢,你可以告訴管家A讓工人1去幹活,同時也可以告訴管家B讓工人2
定義
橋接模式(bridge):將抽象部分與實現部分分離,使它們都可以獨立的變化.
從定義來看,抽象的簡直看不了,那麼通俗點講,我們怎麼理解橋接模式呢?
我們再舉一個例子,假設你是一個地主,你有兩個管家,兩個工人,那麼每天你怎麼指揮他們呢,你可以告訴管家A讓工人1去幹活,同時也可以告訴管家B讓工人2去工作,或者管家A去指揮工人2,管家B去指揮工人1, 你可以自由組合這種變化,管家和工人之間也沒有什麼依賴,他們都可以獨立的變化,那麼我們再把管家和工人的職責和具體的人再分離,是不是就印證了定義呢? 將抽象部分和實現部分分離,使他們都可以獨立的變化? 那麼我們就實現了一個橋接模式了.
好像還是有點繞,那麼我們來看看具體代碼怎麼去實現:
首先,我們先抽象一個管家的職責,這個管家的職責,就是管理工人工作:
public abstract class HouseKeep{
protected Work work;
public HouseKeep(Work work) {
this.work = work;
}
void manage() {
this.work.work();
}
}
接下來我們實現A和B兩個管家:
public class HouseKeeperA extends HouseKeep {
public HouseKeeperA(Work work) {
super(work);
}
public void manage() {
System.out.println("管家A指派");
super.manage();
}
}
public class HouseKeeperB extends HouseKeep {
public HouseKeeperB(Work work) {
super(work);
}
public void manage() {
System.out.println("管家B指派");
super.manage();
}
}
接著我們抽象一個工人的職責,工人的職責當然就是工作了:
public interface Work {
void work();
}
再接著我們實現兩個工作的工人:
public class woker1 implements Work {
public void work() {
System.out.println("工人1工作");
}
}
public class worker2 implements Work {
public void work() {
System.out.println("工人2工作");
}
}
好了,現在我們就可以隨心所意的指揮他們了:
public class clinet {
public static void main(String[] args) {
//你讓管家A指揮工人1
HouseKeep keep = new HouseKeeperA(new woker1());
keep.manage();
//你讓管家A指揮工人2
keep = new HouseKeeperA(new worker2());
keep.manage();
//你讓管家B指揮工人1
keep = new HouseKeeperB(new woker1());
keep.manage();
//你讓管家B指揮工人2
keep = new HouseKeeperB(new worker2());
keep.manage();
}
}
來讓我們看看他們都還聽話嗎:
管家A指派工人1工作
管家A指派工人2工作
管家B指派工人1工作
管家B指派工人2工作
結果還不錯,我們把具體的工作和工作的人做了分離,並且可以讓他們隨意的組合,獨立的變化,那麼這不就是橋接模式嗎?