溫振宏 哈爾濱廣廈學(xué)院
面向?qū)ο缶幊陶Z(yǔ)言中單例模式的實(shí)現(xiàn)
溫振宏 哈爾濱廣廈學(xué)院
單例(SingleTon)模式是面向?qū)ο缶幊陶Z(yǔ)言中的一種軟件設(shè)計(jì)模式。它為應(yīng)用程序提供了對(duì)象的唯一的訪問(wèn)點(diǎn),不管它實(shí)現(xiàn)何種功能,整個(gè)應(yīng)用程序都會(huì)同享一個(gè)實(shí)例對(duì)象。本文以PHP語(yǔ)言及JAVA語(yǔ)言為實(shí)例具體講解了單例式的實(shí)現(xiàn)。
單例模式 面向?qū)ο?PHP JAVA
面向?qū)ο缶幊陶Z(yǔ)言(Object-Oriented Language)借鑒了20世紀(jì)50年代的人工智能語(yǔ)言LISP,引入了動(dòng)態(tài)綁定的概念和交互式開(kāi)發(fā)環(huán)境的思想。始于20世紀(jì)60年代的離散事件模擬語(yǔ)言SIMULA67,引入了類和繼承,成形于20世紀(jì)70年代的Smalltalk。面向?qū)ο缶幊陶Z(yǔ)言是以對(duì)象作為基本程序結(jié)構(gòu)單位的程序設(shè)計(jì)語(yǔ)言,指用于描述的設(shè)計(jì)是以對(duì)象為核心,而對(duì)象是程序運(yùn)行時(shí)刻的基本成分。
面向?qū)ο缶幊陶Z(yǔ)言的發(fā)展分為兩個(gè)方向:一種是純面向?qū)ο缶幊陶Z(yǔ)言,如Smalltalk,Java等。另一種是混合型面向?qū)ο缶幊陶Z(yǔ)言,即在過(guò)程性語(yǔ)言中加入類,繼承等成分,如C++,PHP等。下面就以PHP和JAVA為例講解單例模式的實(shí)現(xiàn)。
PHP是一種混合型編程語(yǔ)言,是HTML內(nèi)嵌式的,用來(lái)制作動(dòng)態(tài)網(wǎng)頁(yè)的服務(wù)器端的腳本語(yǔ)言。其特點(diǎn)是:開(kāi)發(fā)周期短,穩(wěn)定安全,簡(jiǎn)單易學(xué),免費(fèi)開(kāi)源,良好的跨平臺(tái)特性。
JAVA是一種純面向?qū)ο缶幊陶Z(yǔ)言,具有簡(jiǎn)單、分布式、健壯性、安全性、可移植性、多線程、動(dòng)態(tài)性等特點(diǎn)。
單例模式,是一種常用的軟件設(shè)計(jì)模式。它的核心結(jié)構(gòu)中只包含一個(gè)被稱為單例類的特殊類。通過(guò)單例模式可以保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例,而且該實(shí)例易于外界訪問(wèn),從而方便對(duì)實(shí)例個(gè)數(shù)的控制并節(jié)約系統(tǒng)資源。
單例模式主要作用是保證在面向?qū)ο缶幊讨?,一個(gè)類Class只有一個(gè)實(shí)例存在。在很多操作中,比如建立目錄,數(shù)據(jù)庫(kù)連接等都需要這樣的單線程操作;一些資源管理器亦常常設(shè)計(jì)成單例模式;每臺(tái)計(jì)算機(jī)可以有若干個(gè)打印機(jī),但只能有一個(gè)Printer Spooler,以避免兩個(gè)打印作業(yè)同時(shí)輸出到打印機(jī)中;每臺(tái)計(jì)算機(jī)可以有若干個(gè)通信端口,系統(tǒng)應(yīng)當(dāng)集中管理這些通信端口,以避免一個(gè)通信端口被兩個(gè)請(qǐng)求同時(shí)調(diào)用,這就是單子模式。再比如,Windows回收站,在整個(gè)視窗系統(tǒng)中,回收站只能有一個(gè)實(shí)例,整個(gè)系統(tǒng)都使用這個(gè)唯一的實(shí)例,回收站是單例模式的應(yīng)用。當(dāng)然,Windows系統(tǒng)的幫助文檔也是通過(guò)單例模式實(shí)現(xiàn)的。
單例模式的實(shí)現(xiàn)需要有三個(gè)要點(diǎn):一是某個(gè)類只能有一個(gè)實(shí)例;二是它必須自行創(chuàng)建這個(gè)實(shí)例;三是它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。
由兩個(gè)實(shí)例結(jié)果,可以得知單例模式為一個(gè)面向?qū)ο蟮膽?yīng)用程序提供了對(duì)象惟一的訪問(wèn)點(diǎn),不管它實(shí)現(xiàn)何種功能,整個(gè)應(yīng)用程序都會(huì)同享一個(gè)實(shí)例對(duì)象。
從具體實(shí)現(xiàn)角度來(lái)說(shuō),面向?qū)ο缶幊陶Z(yǔ)言(PHP或JAVA)實(shí)現(xiàn)單子模式需注意以下三點(diǎn):一是單例模式的類只能是有私有的構(gòu)造函數(shù)或方法,二是類的定義中含有一個(gè)該類的靜態(tài)私有屬性,三是該類提供了一個(gè)靜態(tài)的共有的函數(shù)或方法用于創(chuàng)建或獲取它本身的靜態(tài)私有對(duì)象。
TP393
A