Time of Update: 2018-12-06
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html;
Time of Update: 2018-12-06
外面電閃雷鳴,下起了大雨。看著閃電掠過,有點恐懼的等待著雷聲。要是寶寶子在,她肯定很害怕了,每次打雷她都想往我懷裡鑽,想我抱著她。一聲巨大的雷聲過後,外面的車警示了,我在想,是不是又擊到什麼了呢。在夏季,廣州經常發生雷擊事件,雷聲經常很大,離我們似乎很近。 剛才意識到晚上我又犯了一個錯誤,因為胃現在開始造反了。寶寶子走的時候留下了三袋仁仔,開始我還沒什麼想法,反正也吃不了辣的,就等她回來吃好了,我就算吃也吃不了那麼多。後來經不住誘惑,也是覺得無聊,就開了那袋鴨爪子,
Time of Update: 2018-12-06
動機:在物件導向系統中,有些對象由於某種原因(比如對象建立的開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問等),直接存取會給使用者或者系統結構帶來很多麻煩。如何在不失去透明操作對象的同時來管理/控制這些對象特有的複雜性?增加一層間接層是軟體開發中常見的解決方式。應用:遠程對象訪問、Copy-On-Write情境:為了使操作ThinkPad對應用程式透明,隔離硬體操作的複雜性,在應用程式和ThinkPad中間置入一代理層(相當於作業系統),此代理通過嚮應用程式提供一致的API,實現對硬體
Time of Update: 2018-12-06
動機:ThinkPad有多個型號,如T43,T60,每個型號都支援多種工作模式。每個型號在不同的模式下有些操作實現不同。隨著不斷髮展,其型號越來越多,工作模式也越來越多。如何把ThinkPad沿著型號和工作模式兩個方向的變化分離,使它們獨立變化,而不引入額外的複雜度(由基類不斷繼承以產生不同型號ThinkPad上不同工作模式所帶來的複雜性)?應用:適應對象的多維度變化結構代碼實現namespace DesignPattern.Bridge{ public abstract class Th
Time of Update: 2018-12-06
輸入一個地址,就可以把那個網頁中的連結提取出來,下面這段代碼可以輕鬆實現,主要的是用到了Regex。 GetUrl.aspx代碼如下:後代碼GetUrl.aspx.vb如下:Imports System.IOImports System.NetImports System.TextImports System.Text.RegularExpressionsImports SystemPublic Class GetUrlInherits System.Web.UI.PageProtected
Time of Update: 2018-12-06
動機:實現一系列相互依賴對象的建立,通過封裝系列對象建立來隔離對象建立和客戶程式,從而能夠靈活提供更多系列對象建立和系列對象間的切換,而不需要改變客戶程式。應用:多種風格軟體介面控制項的建立、對應多種資料庫的多系列資料訪問層對象的建立(比如Petshop中的資料訪問層對象)。情境:此處以ThinkPad系列產品的組裝為例子。組裝電腦程式(即客戶)需要根據需要拿出不同系列ThinkPad(此處以T43和T60為例)組件(以CPU和主板為例)組裝成ThinkPad。因為T43和T60的CPU系列介面
Time of Update: 2018-12-06
動機:客戶代碼過多地依賴於對象容器複雜的內部實現結構,對象容器內部實現結構(而非抽象介面)的變化將引起客戶代碼的頻繁變化,帶來了代碼維護性、擴充性等弊端。本模式通過將對象組合成樹形結構以表示“部分-整體”的階層,讓組合對象實現自身的複雜結構,使得使用者對單個對象和組合對象的使用具有一致性。應用:ASP.NET子父控制項關係。情境:以樹為例,葉子為最低級原子節點,樹為容器,可以包括子樹和葉子。需要使客戶程式對樹和葉子的處理一致,保持透明性,而不需要關心處理的是樹還是葉子。結構:代碼實現namesp
Time of Update: 2018-12-06
剛才又被花花子罵了,因為我沒寫blog。本來想把什麼都寫在這裡,想了一下,還是覺得在這裡唯寫些技術性的東西比較好,非技術性的在這裡很少人關注,寫著也沒勁。但是,我又不想開2個blog,雖然在msn spaces和新浪都有,但是覺得他們都有非常不好的地方。msn
Time of Update: 2018-12-06
小時候在農村長大,家裡姐姐多,條件不好,接觸音樂電影唯一的途徑就是電視和收音機,還好,在幾歲的時候家裡有了一台17英寸黑白電視機,當時還是隊上第二台,這是大姐姐結婚不久買給家裡的,至於收音機,不知道什麼時候有的,在最早的記憶中似乎就有了,很大的那種,有兩個大喇叭,外殼還是木的。關於第一台有不少故事,那是台14英寸的黑白電視。那時候隊上的人一吃完晚飯就都去安叔家看電視,屋裡坐滿了人,她有個小女兒和我差不多大,那時候還說要和我媽媽對親家,據說經常把我們兩個放柜子上坐著。那時候熱播的電視
Time of Update: 2018-12-06
文章目錄 IntroductionWhat is Included in the Client Library 在msdn上看了幾節Ajax&Atlas的講座,高度興趣,加上項目需要,從今天開始,全心學習Ajax和Atlas,為馬上要開始的Ajax項目做好準備。 剛安裝完Atlas後發現在C:\Program Files\Microsoft ASP.NET\Atlas\v2.0.50727\Atlas\
Time of Update: 2018-12-06
學習建立型模式,逐漸領會了面向介面編程的妙處,實現依賴抽象的原則。學習結構型模式,使我看到了使用對象組合帶來的好處,相對繼承,能帶來很多優點,這在Bridge和Decorator模式中尤其明顯。其實,結構型模式在項目中隨處可見,以前的項目中不自覺就會用到,雖然以前不知道那就是模式,當然,很多時候,我並沒有對那些對象進行抽象和提煉,仍然是強耦合。
Time of Update: 2018-12-06
動機:組件包含多個複雜的子系統,其客戶直接依賴該組件子系統,隨著客戶程式和各子系統的演化,這種過多的耦合面臨著變化的挑戰。本模式為子系統中的一組介面提供一個一致的介面,定義了一個高層介面,這個介面使得這一子系統更加容易使用。情境:ThinkPad由多個複雜的子系統組成:主板、CPU、電源等。這些子系統協同工作,提供給客戶具有統一操作介面的ThinkPad。結構代碼實現namespace DesignPattern.Facade{ internal class Mainboard {
Time of Update: 2018-12-06
隨著用.NET2.0開發的深入,偶爾會遇到幾個與.NET1.1不同的地方,我把我遇到的說下吧,免得和我一樣為此鬱悶 1.泛型 好東東啊,安全又能提高效能,IList更是方便對象集合的訪問,而且不用Box和Unbox。 空屬類型其實也是泛型,現在往資料庫裡插入null值不再是件痛苦的事了,可以把能為null的實值型別定義為可為空白類型就ok,資料庫裡可以用sql_variant來接受它,當然,我說的要使用預存程序要指定類型的時候。
Time of Update: 2018-12-06
動機:一個複雜物件由多個子物件構成,該對象建立的演算法相對不變,構成的子物件劇烈變化。如何應對子物件的劇烈變化,隔離比較穩定的建立演算法和易變的子物件,使客戶程式不隨著子物件的改變而改變。情境:ThinkPad系列產品和一般筆記本一樣,擁有比較固定的組成部分:主板、CPU、硬碟、顯示器、鍵盤……。假設所有ThinkPad的組裝過程完全相同,不同績效參數的部分組合在一起形成不同型號的ThinkPad,比如T43和T60。如何在組裝過程不變的情況下,做出適合型號的所需組件(以CPU和主板為例),就能
Time of Update: 2018-12-06
Time of Update: 2018-12-06
早幾天,一個同事遠程登入到我的機器,對我的一個項目進行了些修改。昨天,我開啟改項目編譯,一大堆的“找不到系統命名空間,請添加組件引用”的錯誤,我一看,這些系統組件都已被正確引用,只好把它們全部刪除,再添加引用,這下好了,編譯通過。 今天再開啟該項目進行編譯,又提示同樣的錯誤,而那些系統組件還是已經被正確引用,於是,我又按昨天的方法把問題解決了。接著關閉vs20003,再編譯,同樣的錯誤又出現了。系統組件還是被引用,但是,我發現那些組件都被複製到了項目的bin目錄下,一看組件屬性,複製到本地
Time of Update: 2018-12-06
動機:有時採用純粹物件導向方案導致系統中存在大量細粒度對象,帶來很高的運行時代價——記憶體開銷。如果避免大量細粒度對象問題,同時讓客戶程式能透明地使用物件導向特性進行操作?運用共用技術有效地支援大量細粒度的對象。具體做法是把少量的共用Object Storage
Time of Update: 2018-12-06
動機:使用原型執行個體指定建立對象的種類,然後通過拷貝這些原型來建立新的對象。某些結構複雜物件面臨著劇烈變化,但擁有比較穩定一致的介面,如何隔離出這些易變對象,使客戶程式不隨之改變?情境:ThinkPad的主板和CPU有多種,根據系列不同,如何根據已有的硬碟和CPU生產新的主板和CPU。結構代碼實現namespace DesignPattern.Prototype{ public abstract class CPU { public abstract CPU Clon
Time of Update: 2018-12-06
意圖:出於某種目的(如效能考慮、邏輯性要求)要求一個類的執行個體只能有N個應用:抽象原廠模式中的工廠類、對象池namespace DesignPattern.Singleton{ // 單線程 public class SingleThread { private static SingleThread instance; private SingleThread() { } public static Si
Time of Update: 2018-12-06
動機:將一個類的介面轉換成客戶希望的另外一個介面,使得原本由於介面不相容而不能一起工作的那些類可以一起工作。應用:舊代碼複用、類庫遷移等。情境:原有一隻SP/2介面的滑鼠,現想插在ThinkPad