【正文】
是一個(gè)永不需要修改的程序 , 那么剪剪貼貼就還好 , 但如果程序要保存很長(zhǎng)時(shí)間 ,而且可能需要修改 , 剪貼行為就會(huì)造成潛在的威脅 。 他們?cè)O(shè)想了幾種方案 , 這些方案都會(huì)影響顧客消費(fèi)和??头e點(diǎn)的計(jì)算方式 。 影片出租店的程序 ? 為了應(yīng)付分類(lèi)規(guī)則和計(jì)費(fèi)規(guī)則的變化 , 程序必須對(duì)statement()作出修改 。 隨著各種規(guī)則變得愈來(lái)愈復(fù)雜 , 適當(dāng)?shù)男薷狞c(diǎn)愈來(lái)愈難找 , 不犯錯(cuò)的機(jī)會(huì)也愈來(lái)愈少 。 你心里頭牢牢記著那句古老的工程學(xué)格言「 如果它沒(méi)壞 , 就別動(dòng)它 」 。 它讓你的生活比較難過(guò) , 因?yàn)槟惆l(fā)現(xiàn)很難完成客戶所需的修改 。 影片出租店的程序 ? 從 Customer類(lèi)中 statement方法中分離出 amountFor功能 ? amountFor方法中變量名稱(chēng)的修改 ? 任何一個(gè)傻瓜都能寫(xiě)出計(jì)算機(jī)可以理解的代碼。這種捕獲有效技術(shù)的思想可以應(yīng)用到許多領(lǐng)域當(dāng)中,比如烹飪、焰火制品生產(chǎn)、軟件開(kāi)發(fā)以及其他一些行業(yè)。由某個(gè)行業(yè)的從業(yè)人員組成的社區(qū)通常會(huì)發(fā)明一些專(zhuān)業(yè)術(shù)語(yǔ),以便于同行之間進(jìn)行交流。隨著某個(gè)行業(yè)及其專(zhuān)業(yè)術(shù)語(yǔ)的發(fā)展,一些作者便開(kāi)始起到重要的作用。 設(shè)計(jì)模式基礎(chǔ) —— 什么是設(shè)計(jì)模式 ? 在面向?qū)ο蟮能浖O(shè)計(jì)中,總是希望避免重復(fù)設(shè)計(jì)或盡可能少做重復(fù)設(shè)計(jì)。有經(jīng)驗(yàn)的設(shè)計(jì)者顯然知道一些新手所不知道的東西,這又是什么呢? ? 內(nèi)行的設(shè)計(jì)者知道:不是解決任何問(wèn)題都要從頭做起。當(dāng)找到一個(gè)好的解決方案,他們會(huì)一遍又一遍地使用。它們幫助設(shè)計(jì)者將新的設(shè)計(jì)建立在以往工作的基礎(chǔ)上,復(fù)用以往成功的設(shè)計(jì)方案。 設(shè)計(jì)模式基礎(chǔ) —— 什么是設(shè)計(jì)模式 ? 設(shè)計(jì)模式使人們可以更加簡(jiǎn)單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu),幫助你做出有利于系統(tǒng)復(fù)用的選擇,避免設(shè)計(jì)損害了系統(tǒng)復(fù)用性。簡(jiǎn)而言之,設(shè)計(jì)模式可以幫助設(shè)計(jì)者更快更好地完成系統(tǒng)設(shè)計(jì)。他研究的領(lǐng)域是建筑(而不是軟件)的架構(gòu)。該著作影響深遠(yuǎn),甚至影響到軟件開(kāi)發(fā)行業(yè)。 ? Christopher Alexander 說(shuō)過(guò): “ 每一個(gè)模式描述了一個(gè)在我們周?chē)粩嘀貜?fù)發(fā)生的問(wèn)題,以及該問(wèn)題的解決方案的核心。盡管 Alexander所指的是城市和建筑模式,但他的思想也同樣適用于面向?qū)ο笤O(shè)計(jì)模式,只是在面向?qū)ο蟮慕鉀Q方案里,我們用對(duì)象和接口代替了墻壁和門(mén)窗。 幾個(gè)基本的設(shè)計(jì)模式 —— 單例模式 ? 1:環(huán)境: ? 幾乎在每個(gè)應(yīng)用程序中,都需要有一個(gè)從中進(jìn)行全局訪問(wèn)和維護(hù)某種類(lèi)型數(shù)據(jù)的區(qū)域。 ? 例如,當(dāng)使用某個(gè)類(lèi)來(lái)維護(hù)增量計(jì)數(shù)器時(shí),此簡(jiǎn)單的計(jì)數(shù)器類(lèi)需要跟蹤在多個(gè)應(yīng)用程序領(lǐng)域中使用的整數(shù)值。又如建立目錄、數(shù)據(jù)庫(kù)連接、 Windows針對(duì)所有用戶都應(yīng)有一個(gè)回收站等,都需要這樣的單對(duì)象的操作。 ? 最初,人們可能會(huì)試圖將計(jì)數(shù)器類(lèi)實(shí)例只作為靜態(tài)全局變量來(lái)創(chuàng)建。應(yīng)該由類(lèi)本身來(lái)負(fù)責(zé)只使用一個(gè)類(lèi)實(shí)例,而不是由類(lèi)用戶來(lái)負(fù)責(zé)。 幾個(gè)基本的設(shè)計(jì)模式 —— 單例模式 ? 2:?jiǎn)栴} ? 采用什么方法來(lái)控制創(chuàng)建類(lèi)實(shí)例 的個(gè)數(shù) ,然后確保在任何給定的時(shí)間只創(chuàng)建一個(gè)類(lèi)實(shí)例。 ? 3:解決方案 S in g le t o n I n s t a n ce : S in g le t o n+ g e t I n s t a n ce ( ) S in g le t o n ( )私有的靜態(tài)屬性,類(lèi)的唯一實(shí)例 將構(gòu)造函數(shù)私有化 通過(guò)共有的函數(shù)返回 Instance 幾個(gè)基本的設(shè)計(jì)模式 —— 單例模式 ? 一般 Singleton模式通常有如下兩種種形式,第一種叫餓漢式,第二種叫懶漢式。 ? public class Singleton { private Singleton(){ } private static Singleton instance = new Singleton()。 } } ? pu