Java 中橋接模式——對象結(jié)構(gòu)型模式的實(shí)例詳解
Java 中橋接模式——對象結(jié)構(gòu)型模式的實(shí)例詳解
一、意圖
將抽象部分與它的實(shí)現(xiàn)部分分離,使他們都可以獨(dú)立的變化。
二、適用性
以下一些情況使用Bridge模式
你不希望在抽象和它的實(shí)現(xiàn)部分之間有一個(gè)固定的綁定關(guān)系。例如這種情況可能因?yàn)?,在程序運(yùn)行時(shí)刻實(shí)現(xiàn)部分應(yīng)可以被選擇或者切換。
類的抽象以及它的實(shí)現(xiàn)都應(yīng)該可以通過生成子類的方法加以擴(kuò)充。這時(shí)Bridge模式使你可以對不同的抽象接口和實(shí)現(xiàn)部分進(jìn)行組合,并分別對他們進(jìn)行擴(kuò)充。
對一個(gè)抽象的實(shí)現(xiàn)部分的修改應(yīng)對客戶不產(chǎn)生影響,即客戶代碼不必重新編譯。
(C++)你想對客戶完全隱藏抽象的實(shí)現(xiàn)部分。在C++中,類的表示在類接口中是可見的。
三、結(jié)構(gòu)
四、代碼
public interface Implementor { /** * 實(shí)現(xiàn)抽象部分的具體方法 */ public void operationImpl(); }
public class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorA"); } }
public class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorB"); } }
public abstract class Abstraction { private Implementor mImplementor; /** * 通過實(shí)現(xiàn)部分對象的引用構(gòu)造抽象部分的對象 * * @param implementor 實(shí)現(xiàn)部分對象的引用 */ public Abstraction(Implementor implementor){ mImplementor = implementor; } public void operation(){ mImplementor.operationImpl(); } }
public class RefinedAbstraction extends Abstraction { /** * 通過實(shí)現(xiàn)部分對象的引用構(gòu)造抽象部分的對象 * * @param implementor 實(shí)現(xiàn)部分對象的引用 */ public RefinedAbstraction(Implementor implementor) { super(implementor); } public void refinedOperation(){ //對 Abstraction中的方法進(jìn)行擴(kuò)展。 System.out.println("refinedOperation"); operation(); } }
public class Client { public static void main(String[] args){ Abstraction abstraction = new RefinedAbstraction(new ConcreteImplementorA()); abstraction.operation(); } }
如有疑問請留言或者到本站這區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
mybatis spring配置SqlSessionTemplate的使用方式
這篇文章主要介紹了mybatis spring配置SqlSessionTemplate的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08IDEA關(guān)于.properties資源文件的編碼調(diào)整問題
這篇文章主要介紹了IDEA關(guān)于.properties資源文件的編碼調(diào)整問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06@Transactional解讀(作用、失效場景與解決方式)
這篇文章主要介紹了關(guān)于@Transactional作用、失效場景與解決方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Logger.error打印錯(cuò)誤異常的詳細(xì)堆棧信息
這篇文章主要介紹了Logger.error打印錯(cuò)誤異常的詳細(xì)堆棧信息,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Java線程池流程編排運(yùn)用實(shí)戰(zhàn)源碼
這篇文章主要介紹了Java線程池流程編排運(yùn)用實(shí)戰(zhàn)源碼,就在流程引擎的基礎(chǔ)上運(yùn)用?ThreadPoolExecutor,使用線程池實(shí)現(xiàn)?SpringBean?的異步執(zhí)行2022-03-03