一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

哪些設(shè)計(jì)模式最值得學(xué)習(xí)

  最近又在首頁(yè)看到幾篇設(shè)計(jì)模式相關(guān)的學(xué)習(xí)隨筆。回想起來(lái),這幾年在園子里發(fā)布的有關(guān)設(shè)計(jì)模式的隨筆都有一個(gè)共同的特點(diǎn)。那就是Factory和Singleton居多,如果是系列的,也往往是從這兩個(gè)模式開(kāi)始的。由于能夠堅(jiān)持把《設(shè)計(jì)模式》中所有模式都寫(xiě)完的非常少,所以基本上也很少見(jiàn)到有關(guān)其它模式的隨筆。

  這種情況也很好理解,因?yàn)椤对O(shè)計(jì)模式》這本書(shū)就是按照這個(gè)順序來(lái)的。最先講述的就是Abstract Factory模式,于是它排第一也無(wú)可厚非;排第二的Builder基本不太容易見(jiàn)到;第三的Factory Method由于也叫“Factory”所以往往和Abstract Factory放在一起,或者干脆就混淆了; 第四的Prototype也不是太容易見(jiàn)到;第五位的Singleton簡(jiǎn)單易懂,易學(xué)易用。而再往后的模式,恐怕作者們就沒(méi)什么耐心學(xué)下去了……這可能就是為什么Factory和Singleton出現(xiàn)頻率如此之多的原因吧。

  《設(shè)計(jì)模式》已經(jīng)出版超過(guò)15年了,到今天已經(jīng)不是什么新鮮的東西了,可以說(shuō)正在由“絕招”慢慢向著“基本功”轉(zhuǎn)變著。然而,這種學(xué)習(xí)模式的方式方法卻實(shí)在令人擔(dān)憂(yōu)。

  Abstract Factory在實(shí)際中并不常見(jiàn),因?yàn)樗枰阌袃商撞⑿械睦^承體系,需要對(duì)同一個(gè)抽象有多于一種的實(shí)現(xiàn)方式。這種復(fù)雜的系統(tǒng)可以說(shuō)不是每個(gè)領(lǐng)域,每個(gè)開(kāi)發(fā)人員都能遇到的。在某些特定的領(lǐng)域可能很常見(jiàn),但是在大多數(shù)領(lǐng)域并不需要這么復(fù)雜的對(duì)象創(chuàng)建方法。這就造成了很多人“殺雞用宰牛刀”,用復(fù)雜的方式,解決不那么復(fù)雜的問(wèn)題。后果是增加了不必要的復(fù)雜度,給系統(tǒng)維護(hù)增加了困難。

  另一個(gè)模式Singleton,由于實(shí)現(xiàn)簡(jiǎn)單,意圖“似乎”也很明顯。被很多人用來(lái)作為“優(yōu)化”的一種方式。通過(guò)這種方式來(lái)節(jié)省內(nèi)存空間,減少對(duì)象實(shí)例。但是單一實(shí)例本身就等同于全局變量,而全局變量在幾十年前就已經(jīng)被證明是“反模式”了,用另一種形態(tài)的全局變量來(lái)代替另一種形態(tài)的全局變量有什么好處么?問(wèn)題在與,Singleton的“意圖”并不在于優(yōu)化,而是在于“妥協(xié)”。Singleton的目的在于保證對(duì)象有單一的實(shí)例,這是因?yàn)閷?duì)象必須要有單一的實(shí)例,如果存在多個(gè)實(shí)例,可能會(huì)引發(fā)錯(cuò)誤。也就是說(shuō),Singleton以犧牲程序的清晰和可維護(hù)性,來(lái)達(dá)到保證程序正確的目的。這跟本就和優(yōu)化八竿子打不著,這完全是一種設(shè)計(jì)上的妥協(xié),犧牲一些好處來(lái)獲取更大的好處。如果僅僅是為了節(jié)省幾個(gè)對(duì)象實(shí)例,而非程序的正確才使用Singleton,那就是丟了西瓜揀芝麻。況且節(jié)省那幾個(gè)實(shí)例也跟本就不可能對(duì)程序的性能有太大的影響(特殊領(lǐng)域除外)。

  人的時(shí)間是有限的,23個(gè)模式也不是都那么常用,哪些模式才是最經(jīng)常用到的,才是最值得學(xué)習(xí)的呢?

  第一梯隊(duì):Iterator,Observer,Template Method,Strategy

  Iterator:LINQ,foreach這不都是Iterator么。

  Observer:MVC的核心,.NET中事件就是Observer。

  Strategy:對(duì)同一個(gè)行為有不同實(shí)現(xiàn)的時(shí)候,如果考慮將行為的實(shí)現(xiàn)委托(不是.NET中的委托)給另一個(gè)類(lèi),那就用到了Strategy。通過(guò)這種方式,可以簡(jiǎn)單的替換算法的實(shí)現(xiàn)類(lèi),來(lái)達(dá)到更換算法的目的。

class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}

public void DoSomething()
{
//some code
bar.DoWhatYouWant();
//some code
}
}

class A : IBar
{
public void DoWhatYouWant()
{
//do in A's way
}
}
class B : IBar
{
public void DoWhatYouWant()
{
//do in B's way
}
}

it知識(shí)庫(kù)哪些設(shè)計(jì)模式最值得學(xué)習(xí),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲国产一级a毛片 | 色网站在线视频 | 91福利国产在线观看网站 | 婷婷激情五月网 | 色婷婷丁香六月 | 毛片自拍| 激情图片在线 | 亚洲图片天堂 | 亚洲国产欧美精品 | 国产成人精品午夜在线播放 | 国产欧美日韩综合精品无毒 | 欧美国产综合在线 | 国产精品一区二区三 | 怡红院在线播放 | 极品美女一区二区三区 | 国产精品99精品久久免费 | 在线观看中文字幕国产 | 精品久久久久久免费影院 | 亚洲欧美色中文字幕 | 欧美激情乱人伦 | 亚洲午夜视频 | 综合免费一区二区三区 | 91精品国产麻豆91久久久久久 | 国产欧美日韩高清专区ho | 色综合天天综合网国产成人 | 91嫩草国产线免费观看 | 成人午夜视频免费 | 色一色在线观看视频网站 | 免费国产成人午夜在线观看 | 四虎影视永久免费 | 婷婷亚洲久悠悠色悠在线播放 | 91精品视频免费在线观看 | 欧美另类xxx| 国产精品特级毛片一区二区三区 | 五月激情六月 | 亚洲精品图区 | 亚洲精品国产成人 | 老太婆性杂交欧美肥老太 | 第一页亚洲 | 久久精品亚洲综合一品 | 韩国毛片视频 |