1. 程式人生 > >Java設計模式(十五):橋接設計模式

Java設計模式(十五):橋接設計模式

1. 應用場景

假如你正在為一個新的人體工學且友好的電視遙控器程式設計。你要使用好的OO技能,讓所有的遙控器都基於相同的抽象,對此抽象又做出不同的實現—每部不同型號的電視機都有自己的遙控器的實現。

2. 概念

使用橋接設計模式,不只改變你的實現,也改變你的抽象。將抽象與實現分離開來,使它們可以獨立變化。

3.Class Diagram

  • Abstraction:定義抽象類的介面
  • Implementor:定義實現類介面

在這裡插入圖片描述

這兩個層次之間的關係就叫做“橋接”。

4. Implementation

public abstract class
TV { public abstract void off(); public abstract void on(); public abstract void tuneChannel(); } public class Sony extends TV { @Override public void on() { System.out.println("Sony.on()"); } @Override public void off() { System.out.println("Sony.off()"
); } @Override public void tuneChannel() { System.out.println("Sony.tuneChannel()"); } } public class RCA extends TV { @Override public void on() { System.out.println("RCA.on()"); } @Override public void off() { System.out.println("RCA.off()"
); } @Override public void tuneChannel() { System.out.println("RCA.tuneChannel()"); } } public abstract class RemoteControl { protected TV tv; public RemoteControl(TV tv) { this.tv = tv; } public abstract void on(); public abstract void off(); public abstract void tuneChannel(); } public class ConcreteRemoteControl1 extends RemoteControl { public ConcreteRemoteControl1(TV tv) { super(tv); } @Override public void on() { System.out.println("ConcreteRemoteControl1.on()"); tv.on(); } @Override public void off() { System.out.println("ConcreteRemoteControl1.off()"); tv.off(); } @Override public void tuneChannel() { System.out.println("ConcreteRemoteControl1.tuneChannel()"); tv.tuneChannel(); } } public class ConcreteRemoteControl2 extends RemoteControl { public ConcreteRemoteControl2(TV tv) { super(tv); } @Override public void on() { System.out.println("ConcreteRemoteControl2.on()"); tv.on(); } @Override public void off() { System.out.println("ConcreteRemoteControl2.off()"); tv.off(); } @Override public void tuneChannel() { System.out.println("ConcreteRemoteControl2.tuneChannel()"); tv.tuneChannel(); } }

5. 優點和缺點

5.1 優點

  • 將實現予以解耦,讓它和介面之間不再永久繫結。
  • 抽象和實現可以獨立擴充套件,不會影響到對方。
  • 對於“具體的抽象類”所做的改變,不會影響到客戶。

5.2 缺點

  • 適合用在需要跨越多個平臺的影象和視窗系統上
  • 當需要不同的方式改變介面和實現時,你會發現橋接模式很好用。
  • 橋接模式的缺點是增加了複雜度。

6. JDK

  • AWT (It provides an abstraction layer which maps onto the native OS the windowing support.)
  • JDBC