一.橋接模式java
橋接模式定義:橋接模式即將抽象部分和實現部分分離,使其能夠獨立變化。ide
橋接模式將繼承關係轉爲關聯關係,下降了類與類之間的耦合。post
抽象化:將複雜物理體中一個或多個特徵抽取而出,而注重其餘過程的行動或過程。spa
實現化:是與抽象化給出具體過程,是與抽象化爲互逆關係。3d
脫耦合:將抽象化和實現化的過程解耦合,將他們之間的強關聯轉爲弱關聯關係。code
二.模式結構blog
橋接模式主要包含以下幾個角色繼承
Abstraction 抽象類接口
RefinedAbstraction 擴充抽象類get
Implementor 實現類接口
ConcreteImplementor具體實現類
三.模式實現
如今存在這樣一個應用場景.一個公司的人員存在兩種維度
一種維度是公司內的職務,另外就是黨內職務
職務維度:董事長,辦公室主任
黨內職務維度:紀檢委員,黨支部書記,調查員
職務維度---->黨內職務維度存在1對n的狀況
因此對於職務存在更高維度上的抽象,黨內職務相對簡單。
抽象層面的黨內職務PartPost
public abstract class PartyPost { public abstract void Task(); }
抽象層面的職務,職務能夠1對n黨內職務.
import java.util.ArrayList; //職務 public abstract class Position { private String PositionName =null; private ArrayList<PartyPost> PartyPosts =new ArrayList(); //黨內職位 public Position(String positionName) { PositionName = positionName; } public void Appointment(PartyPost partyPost){ PartyPosts.add(partyPost); } public String getPositionName() { return PositionName; } public void setPositionName(String positionName) { PositionName = positionName; } public void Work(){ System.out.println(PositionName+"時刻準備爲人民服務!"); for (PartyPost post: PartyPosts) { post.Task(); } } }
擴充的抽象類: 董事長是職務具體位置
public class Chairman extends Position { public Chairman(String positionName) { super(positionName); } }
擴充的抽象類: 項目經理是職務具體位置
public class ProjectManager extends Position{ public ProjectManager(String positionName) { super(positionName); } }
實現類結構:黨內職務的調研員
public class Invoker extends PartyPost { @Override public void Task() { System.out.println("調用基層的大好形勢"); } }
實現類結構:黨內職務的的黨支部書記
public class Secretary extends PartyPost { @Override public void Task() { System.out.println("主持調用工做,協調各辦事員的關係!"); } }
實現類結構:黨內職務的的紀檢委員
//紀檢委員 public class CommitteeMember extends PartyPost { @Override public void Task() { System.out.println("防止腐敗而且預防腐敗的發生!"); } }
四.該模式的優勢
1.分離抽象接口和具體實現部分,提供了比繼承更好的解決方案
2.橋接模式提升系統的可擴展性
3.具體實現細節對用戶隱藏
缺點
1.增長系統的理解難度
2.橋接模式須要正確的認識兩種維度的抽象關係
五.應用場景
1.系統中須要定義抽象角色和具體實現角色更靈活
2.對於不但願經過繼承實現類數量劇增的而言,有更好的實現思路