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

 

lazy ideas:

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

singleton

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

  

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(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
        
		

網(wǎng)友評(píng)論