代理、委托、钩子与打桩
代理、委托、鉤子與打樁
- 代理
- 委托
- 鉤子
- 廣義的鉤子
- 打樁
代理
??代理(proxy)指的是在需要使用某個事物時,使用另一個事物來代替原本需要的該事物。具體來說,若原本需要某個類的方法,而現在創建了該類的一個代理類,那么就可以在原本需要使用該類的地方,使用該類的代理類來替換。
??一般意義下的代理的使用場景有很多,比方說,可以在原來類的基礎上實現更復雜的功能。具體來說,如果需要某個類 A 的方法 a。可以定義類 A 的代理類 AProxy,并在其同名方法 a 中調用原來類 A 的方法 a,這樣一來,代理類 AProxy 的同名方法 a 不僅擁有原來類 A 的方法 a 的功能,還可以在其基礎上增加其它功能。
委托
??委托(delegate)指的是一個類在定義的時候就表示自己只是提供相關的實現,把運行自身代碼這項活動交給其它類來完成。
??委托和代理的聯系很緊密,但側重點不同。委托類相當于代理中的被代理類(就是上面代理中提到的“原來類”),被委托類相當于代理中的代理類。但代理中的被代理類在設計的時候并不一定要聲明自己以后會被代理,實際上,被代理類在設計的時候并不知道自己以后會被代理。代理只是強調對代理類的實現,而不是對被代理類的實現。同理,在委托中,側重點是實現委托類,至于被委托類應該怎么設計,這不是委托應該主要考慮的事情。
??委托類的設計是為了遵守設計模式中的單一職責原則,將一個活動的定義與使用分離。
鉤子
??鉤子(hook)指的是一個程序預設的子程序跳轉入口。在不同的編程語言、不同場景下,鉤子可以指預先約定的某一類函數名、某個類的接口引用字段等等。
??鉤子在生活中指的是可以鉤住其它東西的一種工具,只要其它東西上有能被鉤子鉤住的圓環即可。如果我們要使用其它工具,可以先通過鉤子來獲取該工具,這只需要提前在該工具上安裝一個圓環即可。在編程中,這里的圓環相當于一個約定的接口,只要自己編寫的程序遵守了此約定的規范,就可以在含鉤子的程序在調用該程序。
??鉤子和代理也有些淵源。在某種角度上,含鉤子的類也可以看成是一個代理類。但鉤子和代理的區別在于,它們設計思路(流程)正好相反。對于代理,一般來說,被代理的類是很早以前就已經設計好了,而代理類依賴于被代理的類且設計時間晚于被代理類。但對于鉤子,含鉤子的程序往往是提交已經設計好了,之后只需要在使用該程序之前,將“圓環程序”提供該“鉤子程序”,就可以使用該“鉤子程序”了??梢钥闯?#xff0c;雖然“鉤子程序”是依賴“圓環程序”的,但“圓環程序”的設計時間與“鉤子程序”相對獨立,是可以晚于“鉤子程序”的。另外,“鉤子”并未嚴格限定“圓環程序”的內容,“圓環程序”只需要遵守某種約定的規范,其內容可以自由發揮。這類似于 IoC 思想。如果硬要把代理中的概念與鉤子相對應,那么從這個角度上,代理與鉤子的區別在于,對于代理,可以自由發揮的是代理類,而對于鉤子,則是被代理類。
廣義的鉤子
??廣義的鉤子指的是一個可以控制程序流程的一段代碼。但這段代碼與程序其它部分的代碼屬于低耦合,即可以通過不改動其它部分的代碼的條件下,任意地更改這段代碼來控制程序的走向。
??因此,廣義的鉤子不僅包括上面介紹的鉤子,還包括一些類中預設的布爾函數,比方說,可以對某一系列的類中都設置一個布爾函數,然后用該布爾函數的返回值來決定程序走向,則該布爾函數就是一個廣義的鉤子。
打樁
??在編程中,樁(stub)是指用于模擬真實環境的代碼段。在開發者測試中,常常需要模擬真實的環境來用于測試。因為構建真實的環境往往成本很大或者不可能,這就需要模擬。在開發者測試中,一個大型的項目必須要分解成各個基本的單元,先進行單元測試(UT),然后進行集成測試(IT),最后進行系統測試(ST)。分開測試的各個部分的碎片化的模擬環境稱為樁。樁一般就具體為,對真實環境進行模擬所編寫的函數。對樁函數的編寫稱為打樁。
總結
以上是生活随笔為你收集整理的代理、委托、钩子与打桩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程开发使用的辅助软件大全
- 下一篇: 解决 IntelliJ IDEA 内置的