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

worldblog發表於2007-12-12
[用設計模式鍛鍊C#系列]之Singleton、Bridge (轉)[@more@]

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

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

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

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

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

[C#]
// created on -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#基本用法
  不考慮在實際環境中應用帶來
  其它問題的情況.
  如:多執行緒.
---------------------------------------------------------------------


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992384/,如需轉載,請註明出處,否則將追究法律責任。

相關文章