[用設計模式鍛鍊C#系列]之Singleton、Bridge (轉)
-------------------------------------宣告-------------------------------------
國內普遍接觸大約是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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [用設計模式鍛鍊C#系列]之Strategy (轉)設計模式C#
- [用設計模式鍛鍊C#系列]之Builder (轉)設計模式C#UI
- [用設計模式鍛鍊C#系列]之Decorator (轉)設計模式C#
- C#設計模式系列:橋接模式(Bridge)C#設計模式橋接
- 設計模式、用Delphi實現---->Singleton 模式 (轉)設計模式
- C#設計模式-橋接模式(Bridge Pattern)C#設計模式橋接
- 設計模式之——Singleton pattern設計模式
- 設計模式之單例模式 - Singleton設計模式單例
- 設計模式之Singleton - 單態模式設計模式
- C#設計模式(8)——橋接模式(Bridge Pattern)C#設計模式橋接
- 18 個鍛鍊程式設計技能的網站程式設計網站
- 設計模式----Bridge模式設計模式
- 設計模式之單例模式(Singleton Pattern)設計模式單例
- Java設計模式之單例模式(Singleton)Java設計模式單例
- JAVA設計模式之 橋接模式【Bridge Pattern】Java設計模式橋接
- 程式設計師工作之餘應該注意鍛鍊自己的身體程式設計師
- Java設計模式之單例模式(Singleton Pattern)Java設計模式單例
- JAVA設計模式之 單例模式【Singleton Pattern】Java設計模式單例
- 設計模式 - Bridge 橋模式設計模式
- 設計模式(四)Singleton設計模式設計模式
- Singleton設計模式設計模式
- 設計模式 | 橋接模式(bridge)設計模式橋接
- 2.C#設計模式系列01_單例模式_SingletonC#設計模式單例
- 設計模式 - Singleton in Java設計模式Java
- 設計模式系列之單例模式(Singleton Pattern)——確保物件的唯一性設計模式單例物件
- 設計模式之“物件效能模式”: Singleton 單例模式(筆記)設計模式物件單例筆記
- C#設計模式系列:代理模式(Proxy)C#設計模式
- 設計模式—singleton(單例模式)設計模式單例
- 設計模式 - 單例模式(Singleton)設計模式單例
- 設計模式入門(1)------單件(Singleton) (轉)設計模式
- C#設計模式之命令模式C#設計模式
- 設計模式系列之「策略模式」設計模式
- 設計模式系列之「代理模式」設計模式
- Singleton模式之Delphi實現 (轉)模式
- C#設計模式系列:命令模式(Command)C#設計模式
- C#設計模式系列:狀態模式(State)C#設計模式
- C#設計模式系列:原型模式(Prototype)C#設計模式原型
- C#設計模式系列:建造者模式(Builder)C#設計模式UI