Time of Update: 2017-01-18
1. 概述 抽象原廠模式為一個產品家族提供了統一的建立介面。當需要這個產品家族的某一系列的時候,可以從抽象工廠中選出相對應的系列來建立一個具體的工廠類別。2. 抽象原廠模式中的角色 2.1 抽象工廠(AbstractFactory):擔任這個角色的是Factory 方法模式的核心,它是與應用系統商業邏輯無關的。 2.2
Time of Update: 2017-01-18
1. 概述 將一個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。2. 建造者模式中的角色 2.1 建造者(Builder):為建立一個產品對象的各個組件指定抽象介面。 2.2 具體建造者(ConcreteBuilder):實現Builder的介面以構造和裝配該產品的各個組件,定義並明確它所建立的表示,並 提供一個檢索產品的介面。 2.3 指揮者(Director):指揮並構造一個使用Builder介面的對象。 2.4
Time of Update: 2017-01-18
1. 描述: 保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。2. 單例模式主要有3個特點,: 2.1 單例類確保自己只有一個執行個體。 2.2 單例類必須自己建立自己的執行個體。 2.3 單例類必須為其他對象提供唯一的執行個體。3. 實現方式:懶漢單例類和餓漢單例類 3.1
Time of Update: 2017-01-18
1. 概述: 定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類。Factory 方法使一個類的執行個體化延遲到子類。2. 模式中的角色 2.1 抽象工廠(Creator):這個抽象類別(或介面)聲明一個建立對象的Factory 方法,用來返回一個Product類型的對象。 2.2 具體工廠(ConcreteCreator):重定義Factory 方法,返回一個具體的Concrete Product執行個體。 2.3 抽象產品(Product):定義Factory
Time of Update: 2017-01-18
1. 概述: 將一個具體類的執行個體化交給一個靜態Factory 方法來執行,它不屬於GOF的23種設計模式,但現實中卻經常會用到2. 模式中的角色 2.1 工廠類(Simple Factory): 只包含了建立具體類的靜態方法。 2.2 抽象產品(Product):定義簡單工廠中要返回的產品。 2.3 具體產品(ConcreteProduct):具體產品。3. 模式解讀 3.1 簡單原廠模式的一般化類圖 3.2 簡單原廠模式的代碼實現 /// <summary> ///
Time of Update: 2017-01-18
在講策略模式之前,我先給大家舉個日常生活中的例子,從首都國際機場到XXX酒店,怎麼過去?1)酒店接機服務,直接開車來接。2)打車過去。3)機場快軌+地鐵 4)機場巴士 5)公交車 6)走路過去(不跑累死的話)
Time of Update: 2017-01-18
1. 概述 動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比產生子類更靈活。 原理:增加一個修飾類包裹原來的類,包裹的方式一般是通過在將原來的對象作為修飾類的建構函式的參數。裝飾類實現新的功能,但是,在不需要用到新功能的地方,它可以直接調用原來的類中的方法。修飾類必須和原來的類有相同的介面。2. 模式中的角色 2.1 抽象構建(Component):定義一個抽象介面,用以給這些對象動態地添加職責。 2.2 具體構建(ConcreteComponent):定義一個具體的對象,
Time of Update: 2017-01-18
一.起緣故事緣於一位朋友的一道題:朋友四人玩LOL遊戲。第一局,分別選擇位置:中單,上單,ADC,輔助;第二局新加入的夥伴要選上單,四人可選位置變為:中單,打野,ADC,輔助;要求,第二局四人每人不得選擇和第一局相同的位置,請問兩局綜合考慮有多少種位置選擇方式?對於像我這邊不懂遊戲的人來講,看不懂。於是有了這個版本:有4個人,4隻椅子,第一局每人坐一隻椅子,第二局去掉第2隻椅子,增加第5隻椅子,每人坐一隻椅子,而且每個人不能與第一局坐相同的椅子。問兩局綜合考慮,共有多少種可能的情況?我一開始的想
Time of Update: 2017-01-18
1. 概述 為其它對象提供一種代理以控制對這個對象的訪問。 解決的問題:如果直接存取對象比較困難,或直接存取會給使用者或系統帶來一系列問題。這樣對於用戶端(調用者)來說,就不需要直接與真實對象進行互動,解除了調用者與真實對象的耦合。2. 模式中的角色 2.1 抽象實體(Subject):定義了真實實體(RealSubject)和代理(Proxy)的公用介面,這樣就在任何時候使用真實實體(RealSubject)的地方使用代理(Proxy)。 2.2
Time of Update: 2017-01-18
1. 概述 將抽象部分(Abstraction)與實現部分(Implementor)分離,使它們可以獨立地變化。2. 解決的問題 在軟體系統中,有些類型由於自身的邏輯,它具有兩個或多個維度變化。為瞭解決這種多維度變化,又不引入複雜度,這就要使用Bridge模式。3. 模式中的角色 2.1 抽象(Abstraction):定義抽象介面,該介面中包含實現具體行為、具體特徵的Implementor介面。 2.2
Time of Update: 2017-01-18
1. 概述 將對象組合成樹形結構以表示“部分-整體”的階層。組合模式使得使用者對單個對象和組合對象的使用具有一致性。2. 解決的問題 當希望忽略單個對象和組合對象的區別,統一使用組合結構中的所有對象(將這種“統一”性封裝起來)。3. 組合模式中的角色 3.1 組合組件(Component):它是一個抽象角色,為要組合的對象提供統一的介面。 3.2 葉子(Leaf):在組合中表示子節點對象,葉子節點不能有子節點。 3.3 合成組件(Composite):定義有枝節點的行為,用來儲存組件,
Time of Update: 2017-01-18
1. 概述 將一個類的介面轉換成客戶希望的另外一個介面。Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以在一起工作。2. 解決的問題 即Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以在一起工作。3. 模式中的角色 3.1 目標介面(Target):客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。 3.2 需要適配的類(Adaptee):需要適配的類或適配者類。 3.3
Time of Update: 2017-01-18
1. 概述 定義一個操作中的演算法的骨架,而將步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義演算法的某些特定步驟。2. 模式中的角色 2.1 抽象類別(AbstractClass):實現了模板方法,定義了演算法的骨架。 2.2 具體類(ConcreteClass):實現抽象類別中的抽象方法,已完成完整的演算法。3. 模式解讀 3.1 模板方法類圖 3.2 模板方法模式代碼實現 /// <summary> /// 抽象類別 ///
Time of Update: 2017-01-18
1. 概述 為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。2. 模式中的角色 2.1 外觀類(Facade):外觀類知道哪些子系統類負責處理請求,將客戶的請求代理給恰當的子系統對象。 2.2 子系統類集合(SubSystem Classes):子系統類集合實現了子系統的功能,處理外觀類對象指派的任務。3. 模式解讀 3.1 面板模式的類圖 3.2 面板模式的代碼實現 /// <summary> ///
Time of Update: 2017-01-18
1. 概述 將一個請求封裝為一個對象(即我們建立的Command對象),從而使你可用不同的請求對客戶進行參數化; 對請求排隊或記錄請求日誌,以及支援可撤銷的操作。2. 解決的問題 在軟體系統中,行為要求者與行為實現者通常是一種緊耦合的關係,但某些場合,比如需要對行為進行記錄、撤銷或重做、事務等處理時,這種無法抵禦變化的緊耦合的設計就不太合適。3. 模式中角色 3.1 抽象命令(Command):定義命令的介面,聲明執行的方法。 3.2
Time of Update: 2017-01-18
1. 概述 當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。2. 解決的問題 主要解決的是當控制一個對象狀態轉換的條件運算式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3. 模式中的角色 3.1 上下文環境(Context):它定義了客戶程式需要的介面並維護一個具體狀態角色的執行個體,將與狀態相關的操作委託給當前的Concrete State對象來處理。 3.2
Time of Update: 2017-01-18
1. 概述 有時被稱作發布/訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。2. 解決的問題 將一個系統分割成一個一些類相互協作的類有一個不好的副作用,那就是需要維護相關對象間的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護、擴充和重用都帶來不便。觀察者就是解決這類的耦合關係的。3. 模式中的角色 3.1
Time of Update: 2017-01-18
內網使用者或代理上網的使用者使用 複製代碼 代碼如下: using System.IO; using System.Net; public string get_html() { string urlStr = "http://www.domain.com"; //設定要獲取的地址 HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(urlStr); //建立HttpWebRequest對象 hwr.Timeout = 60000
Time of Update: 2017-01-18
方法1: 複製代碼 代碼如下: int d=10; d.ToString("x") //或把x改為X,,,就變成了16位的字串了. int x=Convert.ToInt32(d.ToString("x"),16);//把16進位的字串變回10進位的. 方法2: 複製代碼 代碼如下: static void Main() { int i = 446; string hex = i.ToString( "X" /* or x * ); Console.WriteLine( hex ); int
Time of Update: 2017-01-18
為webBrowser設定代理: 複製代碼 代碼如下: public struct Struct_INTERNET_PROXY_INFO { public int dwAccessType; public IntPtr proxy; public IntPtr proxyBypass; }; [DllImport("wininet.dll", SetLastError = true)] private static extern bool InternetSetOption(IntPtr