[用設計模式鍛鍊C#系列]之Singleton、Bridge

-------------------------------------聲明-------------------------------------
國內普遍接觸.NET大約是2001十一月份,Microsoft正式發佈VS.NET後.(記的不太清楚了)
  雖然,在這之前D版的VS早就有了,偶當時經不住誘惑.
  曾經一段時間閱讀了大量的相關書籍.
  .NET帶來了大量至少說在WINDOWS系列平臺上新的運行和開發技術集.
  特別是號稱互連計算技術又一浪潮的WebService =Soap(HTTP+新數據存儲格式XML)+WINDOWS系統支持+WebService服務端和客戶端(不同於傳統的意義)API集
  在架構方面,就個人意見,可以說吧,WebService是可以代替Microsoft以前的基於DCOM系
  統架構.
       就拿D-DBS的構架來說,XML數據格式的統一帶來了莫大的好處.
       在基於DCOM的解決方案中,DBS->網絡->DBS的過程,數據要不斷的轉化.
       而且數據流往往受路由情況的影響.
       不過,我感覺WebService的開發支持不夠多變.也許是我對COM技術
       的鐘情吧.雖然很多的MS針對體系的開發方案偶沒接觸過.
  然後就是開發平臺的巨大改變.
  首先是CLR的出現,使得對商業系統很重要的移植性好象有了希望.正因爲CLR,偶學了一
段時間,偶又把重心移走,偶覺得即使給開發的程序配置了全局緩衝.還是慢.不象NATIVE代
碼那樣流暢.
   偶沒搞過JAVA,不過好象出名的慢.  
    
   而另一令世人注目的是:C#

   偶覺得:C#的確是一門很先進的語言.很強大.
           對比於其它的傳統語言c、c++,是很純的面嚮對象語言.
          
           對面向對象開發的理念有大量的原生語法和語義支持.  這一點偶真的很欣賞
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           不象C的過程性、C++的多典範,像JAVA,不過我覺得絕對比
                    JAVA強大(JAVA愛好者不要罵啊!).
   偶在2001底,以本人的知識,寫了一篇"有兒戲嫌疑"的《基於.NET開發和運行平臺,架構校園信息系統》,前段時間挖出來,發於CSDN引來很多的雞蛋和石頭,當然也有人表示理解.

   很長時間,沒用.NET了,看到小百合。NET版好象有很多剛接觸。NET的同學,偶想:偶當時學習的時候都是自己看書,好辛苦.這裏將自己收藏的C++設計模式一系列的文章,用C#改寫
                            一方面方便同學,另一方面自己也重溫一下.
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      偶並不會按模式的分類循序貼出.改寫一篇算一篇,貼出也是不定期的.有時間和必要詳細註釋的地方,偶會註釋的.

--------------------------------------------------------------------------------------------------------

名稱:Singleton
中文名:單件
類型:創建型
簡介:一般用於在全局範圍內,保證class對象的唯一性.
      對於這個問題,最好的解決方案是利用class自身的
      特性來實現,而不是對客戶提出要求,那缺乏安全性.
程式:

[C#]
// created on 2003-3-11 at 15:32

using System;
class _singleton{
    private _singleton(){}
    public static _singleton createinstance(){
        if(singleton_instance_ref == null){
            singleton_instance_ref = new _singleton();
        }
            return singleton_instance_ref;
    }
   
    private static _singleton singleton_instance_ref = null;
}

class _singleton_test{
    public static void Main(){
    _singleton ref_singleton = _singleton.createinstance();
    _singleton ref_singleton_ = _singleton.createinstance();
    if(ref_singleton.Equals(ref_singleton_))
Console.WriteLine("Hello,we ref the same space in the memory");
   }
}


點評:
    1.充分利用:static和private的特性
                public和static保證createinstance產生對象的全局性.
    2.private和static修飾singleton_instance_ref確保了它能且只能被class
                內部的static成員函數調用.安全性得到保證.
    3.singleton_instance_ref的對類的依賴和一定的全局性,保證了優於全局變量的
                解決方案.(事實上C#並不支持C、C++等語言中的傳統概念上的全局
                變量了.).因爲C#一切以類爲中心.
    4.對象的生成具有即使性,在支持全局變量的C++之中,這種方案明顯優於定義全局變量
.   5.個人覺得C#將數據類型明確劃分爲引用和數值型(亦可動態分配),的確非常的合理.關於引用,可以說是現代C++明顯的應用趨勢.它避免了指針的不方便, 繼承了對於大對象拒絕值傳遞的特性.
    6.垃圾回收機制能力也在這裏表現出優勢.
擴展:
   1.在本程式中緊有的if語句裏,你是否可看出,這裏存在很大的設計彈性.
   2.對於static,C#加入了不可修飾的靜態構造子的用法.那是傳統的具有面向對象
     特性的語言不具有的特徵.

 

 

---------------------------------------------------------------------------------------------------
名稱:Bridge
中文名:橋接器
類型:結構型
簡介:一般用於將實現和抽象的接口分離.
      以保證系統的低耦合性.這樣的系統就
      便於擴展.它淘汰了單純的實現繼承在
      多功能系統中死板的解決方案.而且由於
      Bridge本身的特性,它很易於結合其它的
      模式.
程式:
[C#]
// created on 2003-3-12 at 9:08

using System;

class abstraction{
public void _operation(implementor imp_ptr){
if(imp_ptr!=null) imp_ptr.implementor();
}
}

interface implementor{
void implementor();
}

class concreteiml_a:implementor{
public void implementor(){
Console.WriteLine("I am _a.  I hava been implemented.");
    }
}
class concreteiml_b:implementor{
public void implementor(){
Console.WriteLine("I am _b.  I have been imlemented.");
}
}

class ts_bridge{
public static void Main()
{
abstraction _bridge = new abstraction();
implementor impl_a = new concreteiml_a();
implementor impl_b = new concreteiml_b();
_bridge._operation(impl_a);
_bridge._operation(impl_b);
}
}

點評:1.首先它使用了C#對面向對象設計理念的原生支持interface.
        C#中,interface默認是public繼承.且繼承之class對它定義
        接口函數的實現必須是public,它不支持修飾.
        對於這個問題,本人認爲,從語法上說道理,不如從語義上理解,
        因爲interface目的是用於繼承class的實現的,若支持聲明爲
        private顯然是不合適的,同理於默認的public繼承.
        C#中的interface還支持屬性、索引等.
     2.本模式一個核心的問題:它實現的支持同於C++中的對於虛函數機制
       的支持,即動態聯編.不談這種機制是否易於理解,這裏絕對是一個
       值得任何程式愛好者探討的地方,這裏含有的真的是精妙的設計.

     3.引用和數值類型的特性.
擴展:
     1.你會發現這裏的結構是簡單的,體現在class級結構層次少和成員關係簡單.
       事實上,由於Biridge的低耦合,結合如抽象工廠(Abstract Factory)來
       控制concreteimplmentor的行爲是最長見的.
     2.C#的interface與abstract class的區別.

---------------------------------------------------------------------
                  聲明:本程式重在演示C#基本用法
                        不考慮在實際環境中應用帶來
                        其它問題的情況.
                 如:多線程.
---------------------------------------------------------------------

發佈了46 篇原創文章 · 獲贊 0 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章