-------------------------------------聲明-------------------------------------
國內普遍接觸.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#基本用法
不考慮在實際環境中應用帶來
其它問題的情況.
如:多線程.
---------------------------------------------------------------------