中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

系統(tǒng)架構(gòu)技能之設(shè)計模式—享元模式

  一、上篇回顧

  通過上篇的講述,我們知道裝飾模式,特別適合對某個類型的對象,動態(tài)的增加新的職責(zé),應(yīng)用程序就像使用原來的對象一樣使用對象新增的裝飾后的功能,裝 飾模式就好像是穿了一層層的外殼,這樣的方式避免了通過繼承來為類型添加新的職責(zé)的形式可取,通過繼承的方式容易造成子類的膨脹,但是當(dāng)裝飾類太多的時 候,也是個難以維護的問題,至少是在裝飾對象的時候,我們可能需要多步操作來完成對象的裝飾,這時候我們可以同上面提出的改進的方案,來完成自動配置裝飾 模式,記錄操作模式的狀態(tài),可以進行有效的回滾操作,以完成撤銷操作。

  我們先來回顧下裝飾模式的使用場景:

      1、當(dāng)我們需要為某個現(xiàn)有的對象,動態(tài)的增加一個新的功能或職責(zé)時,可以考慮使用裝飾模式。

      2、適應(yīng)于某個對象的職責(zé)經(jīng)常發(fā)生變化或者經(jīng)常需要動態(tài)的增加職責(zé),避免因為這種為了適應(yīng)這樣的變化,而增加繼承子類擴展的方式,因為這種方式為 造成,子類膨脹的速度過快,難以控制。

  二、摘要

  本篇我們將會講述結(jié)構(gòu)性模式中的另外一個非常有用的模式-享元模式,享元模式的特點是,復(fù)用我們內(nèi)存中已存在的對象,降低系統(tǒng)創(chuàng)建對象實例的性能消耗。在.NET下的值類型和引用類型的內(nèi)存分配機制,我這里就不做詳細(xì)的講解了,包括引用類型與值類型之間的裝箱和拆箱的操作,這個具體的可以參考園子里面的關(guān)于這方面的文章的討論。

  我們來給出個簡單的享元模式的應(yīng)用前后的對比圖,大概我們就知道享元模式的重要作用了。

  我們這里以繪制一個有樣式的字體來說明吧,有的時候我們想繪制一個純色的文字,比如紅色,那么我們可能需要創(chuàng)建很多的實例,通常來說,這些實例的差別不大,這個時候,我們可以考慮復(fù)用其中創(chuàng)建的某個實例,而不用去new這么多相同的對象,來完成這樣的工作。我們下面以這個例子來說明,使用享元模式的前后對比的情況。

  使用享元模式前:    image

  使用享元模式后:    image

  通過上圖我們可以大概的看出享元模式的目的是什么,本篇將會從以下幾點出發(fā),講述享元模式的應(yīng)用

  1、享元模式的特點和場景。

  2、享元模式的經(jīng)典實現(xiàn)。

  3、享元模式的其他方案。

  4、享元模式小結(jié)。

  下面我們來看下享元模式的類圖吧:

  三、本文大綱

       a、上篇回顧。

       b、摘要。

       c、本文大綱。

       d、享元模式的特點及使用場景。

       e、享元模式的經(jīng)典實現(xiàn)。

       f、享元模式的其他方案。

       g、享元模式使用總結(jié)。

  四、享元模式的特點及使用場景

  4.1、享元模式的特點

  享元模式的意圖是通過共享有效支持大量細(xì)粒度的對象,來提供應(yīng)用程序的性能,節(jié)省系統(tǒng)中重復(fù)創(chuàng)建對象實例的性能消耗,這個怎么理解呢?其實就是以下幾點的含義:

  1、當(dāng)我們系統(tǒng)中某個對象類型的實例較多的情況。

  2、并且要求這些實例進行分類后,發(fā)現(xiàn)真正有區(qū)別的分類很少的情況。

      例如我們的生活中很多的場景,我們在使用拼音輸入的法的時候,如果說我們每個字都是new一個對象實例的操作的話,那么內(nèi)存中的實例就太可怕,這個時候,我們是不是可以考慮將這些重復(fù)的字體在內(nèi)存中只是創(chuàng)建一次,而是通過復(fù)用對象的形式,來組織一些可能有多個字符重復(fù)的內(nèi)容呢?也許這是一個不錯的主意,我們來看看這個示例的過程吧。

image

  4.2、享元模式的使用場景

  1、當(dāng)我們發(fā)現(xiàn)某個類型的對象有大量的實例時,我們是否可以對這些實例進行分類,經(jīng)過分類后,我們發(fā)現(xiàn)只有很少的類別的情況下。

  2、我們發(fā)現(xiàn)通過使用享元模式后能夠提高系統(tǒng)的性能和不會帶來更多的復(fù)雜度時。

  享元模式一般是給出本地內(nèi)存資源節(jié)省的一個方案,并不適合互聯(lián)網(wǎng)上的分布式應(yīng)用的情況,不過享元模式對于排他性的要求資源的控制,是個不錯的選擇的。

  五、享元模式的經(jīng)典實現(xiàn)

  我們下面來根據(jù)上面的我們對輸入法中的字體來進行分析,給出相關(guān)的示例代碼:

字體類型的基類:
public class FontBase
{
private List<string> font = new List<string>();

private string fontName;
public FontBase(string name)
{
this.fontName = name;
}

public FontBase AddFont(string font)
{
this.font.Add(font);
return this;
}
public virtual string FontName
{
get
{
return this.fontName;
}
}
}
具體的文字類型類:
public class ChineseFont : FontBase
{
public ChineseFont()
:
base("ChineseFont")
{
base.AddFont("ChineseFont");
}
}
public class EnglishFont : FontBase
{
public EnglishFont()
:
base("EnglishFont")
{
base.AddFont("EnglishFont");
}
}
具體的創(chuàng)建工廠類:
public class FontFactory
{
private Dictionary<string, FontBase> fonts = new Dictionary<string, FontBase>();

public FontBase Create(string name)
{
FontBase fontBase
= fonts[name];
if (fontBase != null)
return fontBase;

fontBase
= (FontBase)Activator.CreateInstance(Type.GetType(name));

return fontBase;
}
}

it知識庫系統(tǒng)架構(gòu)技能之設(shè)計模式—享元模式,轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 国产一级在线观看 | 久久免费精品视频 | www视频在线观看 | 日本a v在线播放 | 亚洲一区二区综合 | 国产91丝袜在线熟 | www.色.com| 国产精品成人在线播放 | 激情综合五月 | 国产精品自拍视频网站 | 情侣av | 自拍偷拍第一页 | 99九九视频 | 久久久精品网站 | 免费精品 | 免费播放一级片 | 久久久久国产一区二区三区四区 | 久久久久久综合 | 欧美一区二区三区在线 | 欧美日韩视频在线播放 | 91精品国产乱码久久久 | 国产精品久久久乱弄 | 国产精品呻吟久久av凹凸 | 国产精品网址 | 欧美精品久久久久 | 亚洲综合视频 | 91av在线免费观看 | 99精品欧美一区二区三区综合在线 | 日日操网站 | 免费av观看 | 91精品久久久久久久久中文字幕 | 精品99在线 | 国产精品成人在线观看 | 粉色午夜视频 | 色www精品视频在线观看 | 狠狠入ady亚洲精品经典电影 | 欧美精品一二三 | 久草在线青青草 | 污视频免费在线观看 | 精品一区二区三 | 成人av网站在线观看 |