Dubbo 用到哪些設計模式?


Dubbo 框架在初始化和通信過程中使用了多種設計模式可靈活控制類加載 

限控制等功能

工廠模式 

Provider  export 服務時會調用 ServiceConfig  export 方法。ServiceConfig

中有個字段

private static final Protocol protocol =

ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtensi

on();

Dubbo 里有很多這種代碼這也是一種工廠模式只是實現類的獲取采用了 JDK

SPI 的機制這么實現的優點是可擴展性強想要擴展實現只需要在 classpath

下增加個文件就可以了代碼零侵入另外像上面的 Adaptive 實現可以做到 

調用時動態決定調用哪個實現但是由於這種實現采用了動態代理會造成代碼 

調試比較麻煩需要分析出實際調用的實現類

裝飾器模式 

Dubbo 在啟動和調用階段都大量使用了裝飾器模式 Provider 提供的調用鏈為 

具體的調用鏈代碼是在 ProtocolFilterWrapper  buildInvokerChain 完成 

具體是將注解中含有 group=provider  Filter 實現按照 order 排序 

后的調用順序是

EchoFilter -> ClassLoaderFilter -> GenericFilter -> ContextFilter ->

ExecuteLimitFilter -> TraceFilter -> TimeoutFilter -> MonitorFilter ->

ExceptionFilter

更確切地說這里是裝飾器和責任鏈模式的混合使用例如,EchoFilter 的作用是 

判斷是否是回聲測試請求是的話直接返回內容這是一種責任鏈的體現而像 

ClassLoaderFilter 則只是在主功能上添加了功能更改當前線程的 ClassLoader,

這是典型的裝飾器模式

觀察者模式 

Dubbo  Provider 啟動時需要與注冊中心交互先注冊自己的服務再訂閱自 

己的服務訂閱時采用了觀察者模式開啟一個 listener。注冊中心會每 5 秒定 

時檢查是否有服務更新如果有更新向該服務的提供者發送一個 notify 消息

provider 接受到 notify 消息后即運行 NotifyListener  notify 方法執行監 

聽器方法

動態代理模式 

Dubbo 擴展 JDK SPI 的類 ExtensionLoader  Adaptive 實現是典型的動態代理 

實現。Dubbo 需要靈活地控制實現類即在調用階段動態地根據參數決定調用哪 

個實現類所以采用先生成代理類的方法能夠做到靈活的調用生成代理類的 

代碼是 ExtensionLoader  createAdaptiveExtensionClassCode 方法代理類 

的主要邏輯是獲取 URL 參數中指定參數的值作為獲取實現類的 key。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM