Java設計模式(十五):橋接設計模式
阿新 • • 發佈:2019-01-08
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