在平常做實驗時,經常會遇到需要測試某個函式或個模組的執行時長,基本上每次都是在模組前後新增測時間的函式,然後輸出檢視,這樣的工作相當繁瑣,然而每次測試還是這樣做的。
今天上網看到aop相關,發現可以用aop新增測時間功能。
又看到了**模式和裝飾器模式,發現應用裝飾器模式似乎可以簡單實現。
class vbase
virtual
void do_test() = 0;
};class timetest:public vbase
~timetest()
virtual
void do_test() override
private:
vbase *m_ptr;
};class class_to_test:public vbase
};int main()
測試時間則使用timetest類,如果需要其他功能則可以另外建立類,繼承於vbase,同時智慧型指標引數為該類。
輸出:
begin the function…
end the function…
cost time(ms): 1000
略微有點搞不清裝飾器模式、**模式、aop之間的差別。
個人理解是:
裝飾器模式:給某乙個類增加功能,不改變原有類,需要新功能了才利用裝飾類去裝飾,重點在於能夠不改變原類功能而獲得新功能。使用時使用者將被裝飾類作為引數傳入給裝飾器。
**模式:訪問類時增加控制許可權,為原類服務的,重點在於原類。使用時,將使用者與原類隔離,使用者直接訪問**類,並不知道原類的細節。
aop:面向切面程式設計,是否可以理解為,**模式是aop的一種簡單實現?
python利用裝飾器進行執行耗時分析
執行環境 python 3.7.0。特設定了debug模式,便於開啟和關閉耗時分析功能。import time debug 0 在需要分析時效性的時候將該量置為1,否則置為0 def print func time function 計算程式執行時間 param function return de...
c 設計模式 裝飾器模式
裝飾器和被裝飾的物件必須有完全一致的方法名。只是在裝飾器的方法中會呼叫被裝飾物件的同名方法 如果裝飾器和被裝飾的物件方法名不一致,那麼將導致裝飾之後的結果不能再次被另外乙個裝飾器裝飾 因為方法名已經變了 base class 裝飾器模式的基類,被裝飾物件 元件和裝飾器模板都需要繼承自基類 class...
C 設計模式 裝飾器模式
裝飾器模式,顧名思義就是對乙個主體進行修飾。原理就是用乙個新的類去包含乙個舊的類,在新的類中先呼叫舊的類的方法,再呼叫新的類中新新增的方法。這樣就實現了鏈式呼叫。然後可以不斷的新增新的修飾類去修飾。為了能使新的類 裝飾類 能夠包含舊的類 主體類或者已經經過修飾的修飾類 就需要統一基類,所以不論是主體...