Python Editor接口介紹說(shuō)明
Python Editor接口給出了處理所有個(gè)人信息的公共接口,其完整的代碼如清單2所示。PIM通過(guò)調(diào)用getUI()方法能夠獲得與用戶進(jìn)行交互的UI組件,希望大家能夠?qū)W到不少知識(shí)。
在工廠方法模式中,父類負(fù)責(zé)定義創(chuàng)建對(duì)象的公共接口,而子類則負(fù)責(zé)生成具體的對(duì)象,這樣做的目的是將類的實(shí)例化操作延遲到子類中完成,即由子類來(lái)決定究竟應(yīng)該實(shí)體化哪一個(gè)類。
在簡(jiǎn)單工廠模式中,一個(gè)工廠類處于對(duì)產(chǎn)品類進(jìn)行實(shí)例化的中心位置上,它知道每一個(gè)產(chǎn)品類的細(xì)節(jié),并決定何時(shí)哪一個(gè)產(chǎn)品類應(yīng)當(dāng)被實(shí)例化。簡(jiǎn)單工廠模式的優(yōu)點(diǎn)是能夠使客戶端獨(dú)立于產(chǎn)品的創(chuàng)建過(guò)程。并且在系統(tǒng)中引入新產(chǎn)品時(shí)無(wú)需對(duì)客戶端進(jìn)行修改,缺點(diǎn)是當(dāng)有新產(chǎn)品要加入到系統(tǒng)中時(shí),必須對(duì)工廠類進(jìn)行修改,以加入必要的處理邏輯。
簡(jiǎn)單工廠模式的致命弱點(diǎn)就是處于核心地位的工廠類,因?yàn)橐坏┧鼰o(wú)法確定要對(duì)哪個(gè)類進(jìn)行實(shí)例化時(shí),就無(wú)法使用該模式,而工廠方法模式則可以很好地避免這一問(wèn)題??紤]這樣一個(gè)應(yīng)用程序框架(Framework),它可以用來(lái)瀏覽各種格式的文檔,如TXT、DOC、PDF、HTML等,設(shè)計(jì)時(shí)為了讓軟件的體系結(jié)構(gòu)能夠盡可能地通用。
定義了Application和Document這兩個(gè)抽象父類,Python Editor接口客戶必須通過(guò)它們的子類來(lái)處理某一具體類型的文檔。例如,要想利用該框架來(lái)編寫一個(gè)PDF文件瀏覽器,必須先定義PDFApplication和PDFDocument這兩個(gè)類,它們應(yīng)該分別繼承于Application和Document。
Application的職責(zé)是對(duì)Document進(jìn)行管理,并且在需要時(shí)創(chuàng)建它們,比如當(dāng)用戶從菜單中選擇Open或者New的時(shí)候,Application就要負(fù)責(zé)創(chuàng)建一個(gè)Document的實(shí)例。顯而易見,被實(shí)例化的特定Document子類是與具體應(yīng)用相關(guān)的,因此Application無(wú)法預(yù)測(cè)哪個(gè)Document的子類將被實(shí)例化,它只知道一個(gè)新的Document何時(shí)(When)被創(chuàng)建。
但并不知道哪種(Which)具體的Document將被創(chuàng)建。此時(shí)若仍堅(jiān)持使用簡(jiǎn)單工廠模式會(huì)出現(xiàn)一個(gè)非常尷尬的局面:框架必須實(shí)例化類,但它只知道不能被實(shí)例化的抽象類。解決的辦法是使用工廠方法模式,它封裝了哪一個(gè)Document子類將被創(chuàng)建的信息,并且能夠?qū)⑦@些信息從框架中分離出來(lái)。
Application的子類重新定義了Application的抽象方法createDocument(),并返回某個(gè)恰當(dāng)?shù)腄ocument子類的實(shí)例。我們稱createDocument()是一個(gè)工廠方法(factory method),因?yàn)樗浅P蜗蟮孛枋隽祟惖膶?shí)例化過(guò)程,即負(fù)責(zé)"生產(chǎn)"一個(gè)對(duì)象。
Python Editor接口定義了一個(gè)公共的構(gòu)造性方法(builder method)getEditor(),它返回一個(gè)Editor對(duì)象,其完整的代碼如清單1所示。任何一項(xiàng)個(gè)人信息都擁有自己獨(dú)立的用戶界面(Editor),負(fù)責(zé)獲取數(shù)據(jù)并在需要的時(shí)候進(jìn)行修改,而PIM***要做事情的只是通過(guò)Editable來(lái)獲得Editor,并利用它來(lái)對(duì)用戶輸入的數(shù)據(jù)進(jìn)行相應(yīng)的操作。
【編輯推薦】