lazy形容詞,懶惰的,毫無疑問是一個貶義詞。但是,對于計算機領(lǐng)域,lazy卻是非常重要的優(yōu)化思想:把任務(wù)推遲到必須的時刻,好處是避免重復(fù)計算,甚至不計算。本文的目的是拋磚引玉,總結(jié)一些編程中的lazy idea,以期有一些啟發(fā)。google “l(fā)azy”這個單詞,在計算機領(lǐng)域高頻出現(xiàn)三個詞:lazy loading(惰性加載)、lazy initializing(惰性初始化)、lazy evaluation(惰性求值),本文并不刻意區(qū)分,因為不管是loading、initializing還是evaluation都需要耗費計算機的運算資源,而且,loading(initializing)也是某種意義上的evaluation。

 

lazy ideas:

  在GOF的設(shè)計模式中,并沒有一個叫“l(fā)azy loading”之類的設(shè)計模式,但是其思想貫穿在很多設(shè)計模式中。其中比較明顯的就是singleton和proxy模式。

singleton

  單例模式的實現(xiàn)一般都有兩種方式,要么在調(diào)用之前就創(chuàng)建好單例對象(eager way),要么在第一次調(diào)用的時候生成單例對象(lazy way),兩者對象的代碼大致是這樣的:

  

Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),移動開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 1 class eager_meta(type): 2     def __init__(clz, name, bases, dic): 3         super(eager_meta, clz).__init__(name, bases, dic) 4         clz._instance = clz() 5  6 class singleton_eager(object): 7     __metaclass__ = eager_meta 8  9     @classmethod10     def instance(clz):11      &nbs