零、修飾器模式
當我們相對乙個物件新增新功能的時候,無非就是下面這三種方法:
一、身邊的例子
二、什麼情況下使用
三、應用案例
import functools
defmemoize
(fn):
known = dict()
@functools.wraps(fn)
defmemoizer
(*args):
if args not
in known:
known[args] = fn(*args)
return known[args]
return memoizer
@memoize
defnsum
(n):
''' 返回前n個數字的和
:param n:
:return:
'''assert (n >= 0), 'n must be >=0'
return
0if n == 0
else n + nsum(n - 1)
@memoize
deffibonacci
(n):
''' 返回斐波那契額數列的第n個數
:param n:
:return:
'''assert (n >= 0), 'n must be >=0'
return n if n in (0, 1) else fibonacci(n - 1) + fibonacci(n - 2)
if __name__ == '__main__':
from timeit import timer
measure = [,]
for m in measure:
t = timer('{}'.format(m['exec']), 'from __main__ import {}'.format(m['import']))
print(
'name:{},doc:{},executing:{},time:{}'.format(m['func'].__name__, m['func'].__doc__, m['exec'], t.timeit()))
建立型模式,結構型模式,結構型模式
為了閱讀方便,本文使用 全文手工轉換 轉換內容 本文採用電腦和資訊科技 顯示 關閉 字詞轉換 說明 字詞轉換是中文維基的一項自動轉換,目的是通過電腦程式自動消除繁簡 地區詞等不同用字模式的差異,以達到閱讀方便。字詞轉換包括全域性轉換和手動轉換,本說明所使用的標題轉換和全文轉換技術,都屬於手動轉換。如...
結構型模式 裝飾器模式
為已有的物件新增新的功能 新增新的方法到物件所屬的類中 使用組合創造新的物件 使用繼承創造子類 組合 繼承 新增新方法 python中我們可以使用內建的裝飾器特性來實現對類,方法的擴充套件,而無需使用繼承。用裝飾器來實現程式中的橫切關注點 應用中通用的部件,可以在程式中被廣泛使用的 推薦使用func...
結構型模式
結構型模式可以分為類結構型模式和物件結構型模式 類結構型模式關心類的組合,由多個類可以組合成乙個更大的系統,在類結構型模式中一般只存在繼承關係和實現關係。物件結構型模式關心類與物件的組合,通過關聯關係使得在乙個類中定義另乙個類的例項物件,然後通過該物件呼叫其方法。根據 合成復用原則 在系統中盡量使用...