- 類(lèi)型:電子教程大。23.1M語(yǔ)言:中文 評(píng)分:10.0
- 標(biāo)簽:
立即下載
1、開(kāi)篇
其實(shí)咱本來(lái)不是籌劃把體系架構(gòu)中的1些計(jì)劃模式單獨(dú)抽出來(lái)講授的,因?yàn)樵S多的好朋友也比力關(guān)注這方面的內(nèi)容,以是咱想議決咱明白及通常項(xiàng)目中應(yīng)用到的1
些常見(jiàn)的計(jì)劃模式,拿出來(lái)給各人做個(gè)簡(jiǎn)略講授,咱這里只是拋磚引玉,要是某個(gè)地方講授的不精確大概不細(xì)致,請(qǐng)各品德評(píng)指出。園子內(nèi)里的許多的大牛寫(xiě)的計(jì)劃模式
都特別的經(jīng)典,咱這里寫(xiě)大概有點(diǎn)布鼓雷門(mén)的以為,不外咱還是決定把它寫(xiě)出來(lái),盼望能對(duì)初學(xué)者有肯定的資助與引導(dǎo)的作用。即使咱這里要是講某個(gè)地方表明的有問(wèn)
題大概講是某個(gè)地方寫(xiě)的不切合邏輯之處,還請(qǐng)各人多多指出,提著名貴意見(jiàn)。
軟件項(xiàng)目中其實(shí)有許多總結(jié)性的話語(yǔ),好比講軟件=算法 數(shù)據(jù)布局等等這樣的形貌,即使咱們這里大概算法便是泛指1些軟件中的編程要領(lǐng)了,計(jì)劃模式如何去
明白呢?為什么要有計(jì)劃模式?它能帶來(lái)什么?等等這些都是咱們必要討論的問(wèn)題。首先咱們必要了解計(jì)劃模式能帶來(lái)什么。大概這才是咱們學(xué)習(xí)它的緊張緣故原由,要是
講不能為咱們?cè)谥`寫(xiě)軟件的進(jìn)程中帶來(lái)更方面的利益,那咱們也不會(huì)利用與學(xué)習(xí)它。
計(jì)劃模式是什么?
計(jì)劃模式能簡(jiǎn)略的明白為辦理某1系列問(wèn)題的完善的辦理方案。咱們?cè)谲浖_(kāi)辟的進(jìn)程中每每遇到計(jì)劃成果實(shí)現(xiàn)的問(wèn)題,而計(jì)劃模式正是為相識(shí)決軟件計(jì)劃成果
實(shí)現(xiàn)時(shí)遇到的某1類(lèi)問(wèn)題的辦理方案。因?yàn)?樣平常環(huán)境下來(lái)講,咱們?cè)谀硞(gè)軟件成果的開(kāi)辟進(jìn)程中遇到的成果計(jì)劃問(wèn)題,大概是古人很早就遇到過(guò)的問(wèn)題,以是議決這種
計(jì)劃模式的要領(lǐng)來(lái)辦理,能讓咱們?cè)谲浖䦟?shí)現(xiàn)的進(jìn)程中少走彎路,大概講是給咱們的軟件計(jì)劃帶來(lái)很好的機(jī)動(dòng)性與順應(yīng)性。
計(jì)劃模式帶來(lái)了什么?
計(jì)劃模式是源于實(shí)踐,并且每種計(jì)劃模式都包羅了1個(gè)問(wèn)題形貌,問(wèn)題涉及到的加入者并且提供了1個(gè)實(shí)際的辦理方案。計(jì)劃模式的利益咱們能議決下圖來(lái)簡(jiǎn)略
闡明:
即使咱這里大概總結(jié)還不完全,還請(qǐng)各人增補(bǔ),咱會(huì)加載這內(nèi)里的內(nèi)容。即使設(shè)
計(jì)模式帶來(lái)了這么多的利益,以是咱們學(xué)習(xí)計(jì)劃模式就顯得比力須要了,也是從事軟件開(kāi)辟及計(jì)劃必需掌控的根本技能之1。
計(jì)劃模式的簡(jiǎn)略分類(lèi):
即使這里能簡(jiǎn)略的分為這3大類(lèi),下面咱們?cè)趫?bào)告的進(jìn)程中將會(huì)分別講授,即使咱這里所以創(chuàng)建型模
式開(kāi)始講授,咱想創(chuàng)建型模式也是各人項(xiàng)目中必備的吧?下面咱就從創(chuàng)建型模式先來(lái)講授。
2、擇要
本文將緊張講授創(chuàng)建型模式中的單例模式先來(lái)講授,因?yàn)閱卫J绞亲詈?jiǎn)略也是最容易明白的計(jì)劃模式,上手快,易利用的計(jì)劃模式。本文將從下面的流程來(lái)講授
單例模式,背面報(bào)告的計(jì)劃模式也將利用這樣的要領(lǐng)。
1、什么是單例模式?
2、單例模式的應(yīng)用場(chǎng)景。
3、舉例闡明單例模式的利用。
4、總結(jié)單例模式的用法。
3、本文大綱
a、開(kāi)篇。
b、擇要。
c、本文大綱。
d、單例模式的劇情。
e、相干應(yīng)用場(chǎng)景分析。
f、本文總結(jié)。
g、系列進(jìn)度。
h、下篇預(yù)告。
4、單例模式的劇情
本章咱們將來(lái)報(bào)告下單例模式的利用,首先咱們來(lái)看看單例模式的定義:
單例模式:是1種軟件計(jì)劃中經(jīng)常使用的計(jì)劃模式,緊張是用來(lái)控制某個(gè)類(lèi)必需在某個(gè)應(yīng)用步調(diào)中只能有1個(gè)實(shí)例存在。
偶然候咱們必要確保整個(gè)體系中只有某個(gè)類(lèi)的1個(gè)實(shí)例存在,這樣有利于咱們與諧控制體系的舉動(dòng)。比方:咱們?cè)谀硞(gè)體系中利用了發(fā)送短信的這樣的辦事,那么
咱們大概盼望議決單1的短信辦事類(lèi)的實(shí)例,而不是多個(gè)東西實(shí)例完成短信的發(fā)送辦事。此時(shí)咱們能議決單例模式來(lái)完成。
上圖簡(jiǎn)略形貌了單例模式應(yīng)用的位置。
咱們看看單例模式的幾種實(shí)現(xiàn)要領(lǐng):
下面咱們來(lái)舉例闡明下這2種要領(lǐng)的實(shí)現(xiàn)。
1、外部控制的要領(lǐng)
03 |
private List<SendMessage> lists = new List<SendMessage>(); |
04 |
private SendMessage sendInstance; |
06 |
public SendMessage SInstance |
14 |
public void InstanceMethod() |
18 |
sendInstance = new SendMessage(); |
19 |
lists.Add(sendInstance); |
23 |
sendInstance = lists[0]; |
2、內(nèi)部控制要領(lǐng)
01 |
public class Instance1 |
03 |
private static SendMessage sendInstance; |
04 |
private static object _lock = new object(); |
10 |
public static SendMessage SInstance |
16 |
if (sendInstance == null) |
17 |
sendInstance = new SendMessage(); |
這里有幾點(diǎn)必要過(guò)細(xì)的地方,對(duì)付第2種要領(lǐng)有幾個(gè)地方必要闡明下,首先是要控制全局只有1個(gè)實(shí)例的類(lèi),請(qǐng)定義成靜態(tài)實(shí)例,如允許以確保只有1個(gè)實(shí)例對(duì)
象,其次,這個(gè)東西的布局函數(shù)請(qǐng)聲明成掩護(hù)范例的成員,如允許以屏蔽議決直接實(shí)例化的情勢(shì)來(lái)訪問(wèn)。議決這樣的情勢(shì),客戶能不必要了解某個(gè)單例實(shí)例東西的內(nèi)
部實(shí)現(xiàn)細(xì)節(jié)。1樣平常環(huán)境下饜足上面的2點(diǎn)需要就能完成全局唯1訪問(wèn)入口的控制。即使大概在多線程的環(huán)境下接納這樣的情勢(shì)還會(huì)有肯定的毛病,即使咱們這里也簡(jiǎn)略
的講授下相應(yīng)的控制方案。方案如下:
1 |
public class CoolInstance |
6 |
public static readonly CoolInstance Instance = new CoolInstance(); |
看吧很簡(jiǎn)略吧,即使咱們這里來(lái)簡(jiǎn)略表明下原理:
1、咱們先把布局函數(shù)聲明為私有的布局函數(shù),這樣咱們能大概屏蔽外部議決實(shí)例化的情勢(shì)訪問(wèn)內(nèi)部的成員函數(shù)。全部的成員函數(shù)的訪問(wèn)必需議決靜態(tài)成員Instance
來(lái)完成訪問(wèn)。
2、這段代碼議決定義大眾、靜態(tài)、只讀的成員相當(dāng)于在類(lèi)被第1次利用時(shí)實(shí)行布局,因?yàn)槭侵蛔x的,以是1旦布局后不容許修正,就不用擔(dān)心不寧?kù)o的問(wèn)題。
信賴對(duì)上面的介紹各人應(yīng)該根本上了解單例模式的應(yīng)用了,那么下面咱們來(lái)看看項(xiàng)目中的實(shí)際應(yīng)用場(chǎng)景及用法。
5、相干應(yīng)用場(chǎng)景講授
1、場(chǎng)景短信及郵件發(fā)送辦事
那么咱們將接納上面介紹的最“COOL”的要領(lǐng)來(lái)舉行控制,提供發(fā)送短信及發(fā)送郵件的辦事。
01 |
public class CoolInstance |
03 |
private CoolInstance() |
07 |
public static readonly CoolInstance Instance = new CoolInstance(); |
12 |
public bool SendMessage(string telNumber,string content) |
20 |
/// <param name="content"></param> |
21 |
/// <param name="toMail"></param> |
22 |
public bool SendMail(string content,string toMail) |
咱們?cè)賮?lái)看看調(diào)用類(lèi)中怎樣謄寫(xiě)完成調(diào)用。比方咱們有個(gè)訂單類(lèi),當(dāng)有人新下訂單時(shí),將給賣(mài)家發(fā)送短信提示成果。
11 |
//實(shí)行訂單的長(zhǎng)期化要領(lǐng) |
12 |
int count= this.Add(); |
15 |
CoolInstance.Instance.SendMessage(string.Empty, string.Empty); |
17 |
CoolInstance.Instance.SendMail(string.Empty, string.Empty); |
25 |
private void InitOrderInfo() |
32 |
/// <returns></returns> |
這樣咱們就完成了短信發(fā)送辦事及郵件發(fā)送辦事的控制。緊張還是根據(jù)本身的業(yè)務(wù)必要。
2、比方咱們現(xiàn)在提供1個(gè)體系日志辦事大概打印大概掃描的辦事,咱們盼望全局只有1個(gè)訪問(wèn)入口,那么咱們就能議決這樣的單例模式來(lái)實(shí)現(xiàn)這樣的需要。
01 |
public class PrintHelper |
08 |
public static readonly PrintHelper Instance = new PrintHelper(); |
16 |
/// <returns></returns> |
25 |
/// <returns></returns> |
26 |
public bool PrintPreview() |
具體的調(diào)用類(lèi)咱就不寫(xiě)相應(yīng)的代碼,都與上面的情勢(shì)類(lèi)同,下面咱們講授下大概更特別的需要,偶然候咱們大概必要加載咱們創(chuàng)建的唯1實(shí)例,此時(shí)咱們?cè)鯓涌?/p>
制單例實(shí)例東西的加載呢,偶然候大概咱們有這樣的需要。下面咱們來(lái)看看怎樣實(shí)現(xiàn)這樣的需要。
3、可加載單例東西的場(chǎng)景
首先咱們先講下什么環(huán)境下會(huì)遇到這樣的加載要領(lǐng)呢?比方咱們想在單例模式的類(lèi)的布局函數(shù)是帶有肯定參數(shù)的環(huán)境時(shí):
01 |
public class UpdateHelper |
03 |
private string type = string.Empty; |
04 |
private static object _lock = new object(); |
05 |
private static UpdateHelper instance; |
06 |
private UpdateHelper(string valueType) |
11 |
public static UpdateHelper Instance |
19 |
//要是這里有多個(gè)條件需要的話,大概寫(xiě)起來(lái)會(huì)比力龐大,那么有更好的要領(lǐng)來(lái)處理懲罰嗎? |
20 |
instance = new UpdateHelper("test!"); |
那么咱們來(lái)分析幾種步伐,有沒(méi)有更好的步伐來(lái)處理懲罰呢?
1、首先咱們不能手動(dòng)實(shí)例化,以是咱們沒(méi)有步伐動(dòng)態(tài)傳入布局函數(shù)參數(shù),只能在類(lèi)的內(nèi)部指定這個(gè)參數(shù),不過(guò)偶然候咱們必要?jiǎng)討B(tài)的加載這個(gè)參數(shù),那么這樣的
情勢(shì)顯然就沒(méi)有步伐實(shí)現(xiàn)。
2、議決屬性的要領(lǐng),來(lái)動(dòng)態(tài)的設(shè)置屬性的內(nèi)容來(lái)完成輸出參數(shù)的變化,不過(guò)這樣的要領(lǐng)大概太甚自由,無(wú)法饜足單例模式的初衷。
3、接口要領(lǐng),因?yàn)榻涌诒匦枰款?lèi)來(lái)實(shí)現(xiàn),以是更不靠譜,能不思量這樣的要領(lǐng)。
4、議決Attribute的要領(lǐng)來(lái)將資訊動(dòng)態(tài)的注入到布局函數(shù)中,不過(guò)如何講這樣的要領(lǐng)是不是太發(fā)兵動(dòng)眾了呢?終究單例模式本來(lái)便是很簡(jiǎn)略的。
5、議決配置文檔,議決config文檔配置節(jié)點(diǎn)的情勢(shì)來(lái)動(dòng)態(tài)的配置相干資訊,實(shí)現(xiàn)加載實(shí)例東西內(nèi)容的環(huán)境。
議決上面的5種環(huán)境的分析,那么議決2、4、5能實(shí)現(xiàn)這個(gè)需求,不過(guò)比擬相應(yīng)的價(jià)格來(lái)講,5的要領(lǐng)是最機(jī)動(dòng)也是最切合單例模式本來(lái)的范例需求,相對(duì)來(lái)講
成本與價(jià)格也能汲取。
1 |
<?xml version="1.0" encoding="utf-8" ?> |
4 |
<add key="ssss" >value</add> |
那么咱們上面的單力模型中的代碼只必要稍微的變革下即可,請(qǐng)看如下代碼:
01 |
public class UpdateHelper |
03 |
private string type = string.Empty; |
04 |
private static object _lock = new object(); |
05 |
private static UpdateHelper instance; |
06 |
private UpdateHelper(string valueType) |
11 |
public static UpdateHelper Instance |
19 |
//要是這里有多個(gè)條件需要的話,大概寫(xiě)起來(lái)會(huì)比力龐大,那么有更好的要領(lǐng)來(lái)處理懲罰嗎? |
20 |
instance = new UpdateHelper(System.Configuration.ConfigurationManager.AppSettings["ssss"].ToString()); |
咱想到這里各人都對(duì)單例模式有個(gè)簡(jiǎn)略的了解了,本文的內(nèi)容就講到這里。咱們來(lái)回顧下咱們報(bào)告的內(nèi)容:
6、本文總結(jié)
本文緊張報(bào)告了創(chuàng)建型模式中的單例模式,單例模式緊張是用來(lái)控制體系中的某個(gè)類(lèi)的實(shí)例的數(shù)量及全局的訪問(wèn)入口點(diǎn)。咱們緊張報(bào)告了實(shí)現(xiàn)單例模式的要領(lǐng),
分為外部要領(lǐng)及內(nèi)部要領(lǐng),即使咱們現(xiàn)在接納的要領(lǐng)都是內(nèi)部要領(lǐng),還報(bào)告了線程寧?kù)o的單例模式及帶有參數(shù)的布局函數(shù)的環(huán)境,根據(jù)配置文檔來(lái)實(shí)現(xiàn)參數(shù)值的動(dòng)態(tài)配
置的環(huán)境。盼望本文的講授能對(duì)不熟習(xí)計(jì)劃模式的同仁能大概相識(shí)了解單例模式的應(yīng)用,而對(duì)已熟知單例模式的同仁能溫故而知新,咱會(huì)開(kāi)心寫(xiě)好這個(gè)系列,即使咱這
里大概在大牛的面前大概是布鼓雷門(mén)吧,不外咱會(huì)連續(xù)開(kāi)心,奪取寫(xiě)出讓各人1看就明確的計(jì)劃模式系列。本文錯(cuò)誤之處再所難免,還請(qǐng)各品德評(píng)之處,咱會(huì)連續(xù)改
進(jìn)。
7、系列進(jìn)度
創(chuàng)建型
1、體系架構(gòu)技能之計(jì)劃模式-單件模式
2、體系架構(gòu)技能之計(jì)劃模式-工廠模式
3、體系架構(gòu)技能之計(jì)劃模式-抽象工廠模式
4、體系架構(gòu)技能之計(jì)劃模式-創(chuàng)建者模式
5、體系架構(gòu)技能之計(jì)劃模式-原型模式
布局型
1、體系架構(gòu)技能之計(jì)劃模式-組合模式
2、體系架構(gòu)技能之計(jì)劃模式-表面模式
3、體系架構(gòu)技能之計(jì)劃模式-適配器模式
4、體系架構(gòu)技能之計(jì)劃模式-橋模式
5、體系架構(gòu)技能之計(jì)劃模式-裝飾模式
6、體系架構(gòu)技能之計(jì)劃模式-享元模式
7、體系架構(gòu)技能之計(jì)劃模式-署理模式
舉動(dòng)型
1、體系架構(gòu)技能之計(jì)劃模式-下令模式
2、體系架構(gòu)技能之計(jì)劃模式-觀察者模式
3、體系架構(gòu)技能之計(jì)劃模式-戰(zhàn)略模式
4、體系架構(gòu)技能之計(jì)劃模式-職責(zé)模式
5、體系架構(gòu)技能之計(jì)劃模式-模板模式
6、體系架構(gòu)技能之計(jì)劃模式-中介者模式
7、體系架構(gòu)技能之計(jì)劃模式-表明器模式
8、下篇預(yù)告
下篇咱們將會(huì)介紹咱們各人最熟知的項(xiàng)目模式,即使咱會(huì)更多的聯(lián)合實(shí)例來(lái)講授每個(gè)計(jì)劃模式的應(yīng)用場(chǎng)景及具體的實(shí)例,來(lái)更清楚的形貌什么環(huán)境下用什么模
式,及每個(gè)模式之間的區(qū)別。各人的支持便是咱謄寫(xiě)的動(dòng)力,盼望各人多多支持咱吧!