visitor/command
老實說我搞不清楚這算哪個 pattern,所以一起列出來
假設有三個函式 f1, f2, f3 定義如下
def f1(s): return s+’-1′
def f2(s): return s+’-2′
def f3(s): return s+’-3′
想把一筆資料依序丟進 f1 f2 f3 處理
(這邊簡單加上一個 suffix 代表處理過)
最後會得到新的結果,這相當於丟進一個 (f3。f2。f1)() 函式裡
其實很直覺就會這樣寫
f3(f2(f1(data)))
不過萬一 pipeline 很長,就變成要一直套上去
pipeline 需要更動的話,這樣寫也不好維護
但在 python 中,其實有另一種處理方式
def process(data, flist):
return reduce(lambda s,f:f(s), [data]+flist)
往後只要編輯好一個 function list,連同待處理資料一起丟進去
filters = [f1,f2,f3]
result = process(’img’, filters)
得到的 result 就會是 ‘img-1-2-3′
一般支援部份 functional 的程式語言應該都辦得到
這個可以用在哪裡呢?我都寫那麼清楚應該不用再多說了
事實上我就是拿來處理影像用的,而且的確很方便
當然也有很多其他的用途啦,就看怎麼應用了