定義
- 也叫做橋接模式,將抽象和實(shí)現(xiàn)解耦,使得兩者可以獨(dú)立的變化。(抽象角色引用實(shí)現(xiàn)角色,或者說(shuō)抽象角色的部分實(shí)現(xiàn)是由實(shí)現(xiàn)角色完成的。)
通用類圖:

橋梁設(shè)計(jì)模式通用類圖
/*
* 實(shí)現(xiàn)化角色
* */
public interface Implementor {
// 定義基本方法
public void doSomething();
public void doAnything();
}
public class ConcreteImplementorOne implements Implementor {
@Override
public void doSomething() {
// TODO Auto-generated method stub
}
@Override
public void doAnything() {
// TODO Auto-generated method stub
}
}
public class ConcreteImplementorTwo implements Implementor {
@Override
public void doSomething() {
// TODO Auto-generated method stub
}
@Override
public void doAnything() {
// TODO Auto-generated method stub
}
}
public abstract class Abstraction {
// 定義對(duì)實(shí)現(xiàn)化角色的引用
private Implementor imp;
public Abstraction(Implementor _imp) {// 約束子類必須實(shí)現(xiàn)該構(gòu)造函數(shù)
this.imp = _imp;
}
// 自身行為和屬性
public void request() {
this.imp.doSomething();
}
// 獲得實(shí)例化角色
public Implementor getImp() {
return this.imp;
}
}
public class RefinedAbstraction extends Abstraction {
// 覆寫構(gòu)造函數(shù)
public RefinedAbstraction(Implementor _imp) {
super(_imp);
// TODO Auto-generated constructor stub
}
// 修正父類的行為
@Override
public void request() {
// TODO Auto-generated method stub
/*
* 業(yè)務(wù)處理
*/
super.request();
super.getImp().doAnything();
}
}
public class Client {
public static void main(String[] args) {
// 定義一個(gè)實(shí)現(xiàn)化角色
Implementor imp = new ConcreteImplementorOne();
// 定義一個(gè)抽象化角色
Abstraction abs = new RefinedAbstraction(imp);
abs.request();
}
}
優(yōu)點(diǎn):
- 抽象和實(shí)現(xiàn)分離:實(shí)現(xiàn)可以不受到抽象的約束,不用再綁定在一個(gè)固定的抽象層次上,是為了解決繼承的缺點(diǎn)而提出的設(shè)計(jì)模式。
- 優(yōu)秀的拓展能力
- 實(shí)現(xiàn)細(xì)節(jié)對(duì)客戶透明:客戶不關(guān)心細(xì)節(jié)的實(shí)現(xiàn),它已經(jīng)由抽象層通過聚合關(guān)系完成了封裝
使用場(chǎng)景:
- 通過繼承層次過渡、無(wú)法更細(xì)化設(shè)計(jì)顆粒等場(chǎng)景
- 接口或抽象類不穩(wěn)定的場(chǎng)景
- 重用性要求較高的場(chǎng)景,設(shè)計(jì)的顆粒度越細(xì),則被重用的可能性就越大,而采用繼承則受到父類的限制,不可能出現(xiàn)太細(xì)的顆粒度
注意事項(xiàng):
- 橋梁模式的意圖是對(duì)變化的封裝,盡可能把變化的原因封裝到最細(xì)、最小的邏輯單元中,避免風(fēng)險(xiǎn)的擴(kuò)散。