亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

gof設計模式回顧

系統 1839 0

gof23根據講師學習筆記回顧:

1.gof:Gang of Four;叫grasp更具有針對性,解決具體的問題;

---------------------總共分為三大類:

---------創建型:(6):Singleton單例、Builder建造者、簡單工廠(也算是吧)、FactoryMethod工廠方法、AbstractFactory抽象工廠 、Prototype原型(注意深復制淺復制)

---------結構型:(7)Adapter適配器、Bridge橋接、Composite組合、Decorator裝飾、Facade外觀、FlyWeight享元、Proxy代理

---------行為型:(11)TemplateMethod模板方法、Command命令、Interpreter解釋器、Mediator中介者、Iterator迭代器、ChainofResponsibility職責連、Observer觀察者、????? Memento備忘錄、

State狀態、Strattegy策略、Vistor訪問者

---------單例:

1.意圖:保證一個類僅有一個實例,并提供一個該實例的全局訪問點;

2.sealed;禁止繼承,私有靜態變量,私有構造函數(防止實例化),公共靜態屬性

3.普通的單例不安全,考慮到線程需要加lock,

4.c#特有屬性satic構造函數,只執行一次,可以把創建實例任務交給他來做

5.三層架構中工廠常見有兩種選擇(單例或是緩存cache)

6.C#終極單例:利用嵌套類的靜態構造函數;

7.克隆也就是原型、序列化破壞了單例;

?

---------建造者:

1.動機:一個復雜對象的創建通常有各個部分的子子對象用一定的算法構成,由于需求多的

?????? 的變化,這個復雜對象的各個子部分經常面臨劇烈的變化,但是組合在一起的算法卻相對穩定。

2.蓋房子案例;

3.主要用于分步驟構建一個復雜的對象,分步驟是一個穩定的算法;體現了封裝性;

4.建造者解決的是對象部分的變化(子類),而抽象工廠解決的是對象系列的變化(抽象);

?

---------簡單工廠:

1.只有一個工廠,只有一個產品(抽象),有多個子類;體現了里氏替換,和封裝變化點;

2.用具和工廠之間達成了契約(接口),工廠根據用戶不同的要求提供基于這份約定的不同產品。

?

---------工廠方法:

1.某個對象的創建由于需求的變化經常面臨劇烈的變化,但卻擁有比較穩定的接口

2.他將一個類的創建延遲到了子類;

3.為工廠添加子類,而每個子類負責創建具體的產品。工廠里氏替換,得到具體工廠再得到產品;

4.案例:磨具和玩具;

5.適用性:1.不知道多要創建對象類的時候、希望有他的子類創建、希望通過配置文件來指定;

6.工廠方法解決單個對象需求變化;抽象工廠解決系列對象的需求變化;建造者解決對象部分變化;

7.個人可以理解,三層中抽象工廠,解決數據庫的切換,是一個縱向的過程,而工廠方法是一個橫向的過程;

?

---------抽象工廠:

1.面臨兩個維度:產品的種類(三層中的接口的種類),產品系列(三層中的數據庫切換種類)

2.抽象工廠提供子工廠供用戶基于契約的各種產品;

3.這里注意一下反射技術:

(1)程序集在bin目錄下;

//Assembly:程序集的名稱(命名空間)

//classNamespace:命名空間+類名;

Assembly.Load(Assembly).CreateInstance(classNamespace)

(2)指定路徑下的程序集

//path:程序集所在路徑:比如:C:\Users\weboffice\DataAccess\bin\Debug\DataAccess.dll

//name:命名空間+類名;

Assembly.LoadFrom(path).CreateInstance(name)

(3)

//Assembly:程序集的路徑

//classNamespace:命名空間+類名;

Assembly.LoadFile(Assembly).CreateInstance(classNamespace)

?

----------原型:

1.意圖:使用原型實例來指定創建對象的種類,然后通過拷貝這些原形來創建新的對象。

2.在類的內部實例化自己想外部提供。這樣就將自己復制了出來;

3.C#提供了icloneable接口,還有淺復制的base.Memberwiseclone();就不用在clone內部自己實例化自己

? 還得降當前屬性值一一付給這個新的對象,直接return base.Memberwiseclone();即可;

4.深復制淺復制的區別:實際上是引用類型的copy是對象還是只是地址;解決的話,那么還得讓引用類型

? 也進行復制,將復制的值給到新對象的變量即可;

?

---------以上創建型完畢

---------適配器

1.個人認為是解決的是接口轉換問題;如何將一些現存對象在新的接口環境下還能使用;

?

---------橋接

1.意圖:將抽象部分與實現部分分離,是他們都可以獨立的變化。

2.比如角色和權限,如果使用繼承的話,破壞了封裝和不利于擴展,而使用組合思想,將角色和權限各自

? 提取自己的抽象,并按照各自的維度變化,只要組合這些變化便可。

3.體現了復用原則;針對接口編程;實現了抽象與實現相分離;

4.使用兩個非常強的變化維度;

?

---------組合:

1.具備容器特征的對象,類似自己聚合自己層層嵌套,和容易想起樹形控件、和遞歸調用;

2.為了讓一個復雜的對象處理起來就像處理一個簡單的對象;

?

?

----------裝飾:

1.動機:通過繼承來擴展對象的功能,由于繼承引入了靜態特性,使之缺乏靈活性,但是如果動態

? 添加功能則很靈活。

2.兩層抽象;

3.實現了動態的擴展功能,可以創建不同行為組合,體現出順序;

4.缺點,會使用比繼承更多的對象,變得錯中復雜;

5.它并不是解決多子類衍生的多繼承問題,而橋接則解決這個問題,裝飾主要解決在多個方向擴展功能;

?

----------外觀模式;

1.說白了就是門面,為子系統的一組接口提供一致的界面

2.不僅簡化了組件系統的接口而且也達到了一種解耦效果。

3.外觀:簡化接口;適配器:轉化接口;橋接:分離接口與實現(兩個維度);裝飾:有穩定接口的前提下為對象擴展功能;

?

----------享元模式:

1.表面似乎和單例達到效果差不多,但有區別的。

2.主要解決因大量細粒度的對象會充斥整個系統,占用大量內存;

3.當對象被頻繁使用時,可以把他們聚合起來,成為共享的,當再次調用,直接調用,不必重新new;

4.案例,保姆公司,提供不同保姆案例

5.注意分辨外部狀態(比如傳參)和內部狀態(共享的)

6.降低系統對象的個數,降低內存壓力;但使復雜程度增加;

7.考慮是否值得,當對象太少的話,而使用享元得不償失;

?

----------代理:

1.為其他對象提供一種代理以控制對這個對象的訪問;體現了一種封裝思想;

2.代理,與適配器區別:代理主要是控制對對象訪問的復雜度;

3.比如webservice中有代理類,封裝了網絡數據傳輸解析等,而使得訪問特別方便;

?

----------以上結構型完畢

----------模板方法:

1.動機:對于某一項任務,常常有穩定的整體操作結構,但子部分有很多改變的需求;

2.它是子類可以不改變一個算法的結構重定義該算法的某些特定步驟。

3.父類封裝了固定算法方法,并定義子虛方法,兒子類實現父類重寫虛方法達到變更步驟細節效果。

4.比如造房子步驟都一樣的,把步驟順序和步驟抽象出來,讓各種類型房子實現即可,不變的是步驟,變? 化的是步驟內部的東西,而這些由子類來重寫;

5,三層中可使用模板,針對sql和orical;

6.一次性實現一個算法的不變部分,將可變的行為留給子類來實現。子類的公共行為應該提取給父類,防止重復;

7,實際是鉤子思想(虛方法或抽象方法)

?

-----------命令模式:

1.動機:行為請求者和行為實現者呈現一種緊耦合,比如頁面按鈕點擊事件;

2.意圖:將一個請求封裝為一個對象,將行為對象化,使得可操作,比如排隊、撤銷;

3.將命令行為抽象成對象,而這個對象負責執行傳過來對象的某種行為,這樣再聚合一系列的命令對象,

? 這樣便可以讓命令排隊,撤銷,全部執行等操作;

4.可以是多個請求進行記錄、排隊、撤銷、同意執行;命令可以將狀態保存;

5.比如迅雷的多文件下載;

6.將命令序列化,驚醒網絡傳輸;

7.組合模式+命令模式=符合命令;層層執行;

8.過多的命令,就是這種模式不切實際;

9.和委托類型,注意區別;命令更加嚴謹;

?

------------解釋器(很少使用,還有享元)

1.動機:某一特定領域的問題比較復雜,類似的謀士不斷重復出現。

2.可以把重復出現的行為抽象出來形成特定的語法規則;

3.定義一種解釋器,來解釋語言中的句子;

4.提供了一個簡單的方式來執行語法,容易修改和擴展語法;

5.實際就是將解釋過程、轉換過程抽象出來而已。

?

------------mediator中介者:

1.多個對象相互交互會有復雜的引用關系,但遇變更很難更改;難以重用復用;

2.可以是一個中介對象來管理這種交互,好比公司找員工,員工找公司,就會錯綜復雜,如果

雙方都照中介的話,有中介交互,就有多對多轉化為了一對多,和一對多關系。

3.達到一種松散耦合目的;

4.案例:國家和聯合國的關系;

5.將多個對象間復雜的關聯關系解耦,將多對對關聯,轉變為了多對一個終結者關聯;

7.終結者,聚合多有對象,當一個對象要通知其他對象時,遍歷即可;

?

------------iterator迭代器;

1.對于一個集合,我們關心的第一,數據存儲結構第二遍歷數據;

2.為了不違背單一職責原則,將遍歷行為分離出去;

3.抽象出一個迭代類負責,既不暴露集合內部結構,又能是外面訪問。開閉原則;

4.1.順序訪問集合元素2.不暴露對象內部;

5.集合對象對外提供一個迭代器類;集合對象類和迭代器類之間是雙向應用;

6..net:非泛型和泛型:IEnumerable接口返回一個IEnumerator(提供多的迭代器);

7.foreach迭代器原理,在使用foreach,集合應該是只讀的,不應該在內部做相應的操作。應該使用

for循環;

-----------職責連模式:

1.動機:一個請求可能被多個對象進行處理,但是每個請求在運行時只能有一個接受者,如果顯示

的指定,就會形成緊耦合;

3.比如員工請假,根據請假天數,層層往上傳遞申請;

4.適用場合:一個請求可能有多個接受者,但最后真正接受者只有一個。

5.職責連目的是將請求發送者和請求接受者解耦;可動態添加修改請求的接受者

?

-----------觀察者(*)

1.體現一種通知依賴關系;

2.定義對象間的一對多依賴關系,以便當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知

并自動更新。

3.被觀察這聚合觀察者,而觀察者又關聯被觀察者。

4.注意.net中事件委托,委托充當了抽象的observer接口,而提供事件的對象充當了目標對象。

?

-----------備忘錄

1.讓人想起游戲進度保存進度讀取,

2.動機:對象的狀態在轉換過程中需要回溯之前某個狀態;

3.如何實現對象的狀態的良好保存和回溯,但又不會因此破壞對象本身的封裝性;

4.實際上是將狀態保存到對象中,然后在由管理者聚合這些狀態,根據標識存取這些對象;

?

-----------狀態

1.動機:如何在運行時根據對象的狀態來透明的更改對象的行為;而不為對象的操作和狀態轉化引入緊耦合。

2.允許一個對象在其內部狀態改變時,改變他的行為,貌似是不同的對象;

3.表現為將狀態抽象,而將不同的行為放在子對象中。

4.將所有與一個特定狀態的相關的行為放入一個state的子類,在對象狀態切換時,切換相應的對象,同時

維持state的接口,這樣實現了具體的操作與狀態轉換之間的解耦。

?

----------策略:

1.某些對象使用的算法可能多種多樣,經常改變。直接寫到對象中有些復雜。

2.如何在運行時,來動態改變算法。

3.定義一系列算法,把它們一個個封裝提來,并使他們相互替代(狀態有些類似吧)

?

----------訪問者:最后一種:

1.再不改變類的層次結構的前提下透明的為類層次結構(被訪問者)上的各個類動態的添加新的操作。

2.表現為,調度這聚合被訪問的對象,之后遍歷對象接受訪問者的訪問,對象在接受

訪問時,把自己關聯到訪問者的內部。

3.體現的是雙向關聯,通過雙重分發來實現在不改變對象類層次結構的前提下,在運行時

透明的為類層次結構上的各個類動態添加新的操作。

4.缺點:一旦對象結構類發生改變,比如增加,那每一個訪問者都必須得到通知。代價很大

?

gof設計模式回顧


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色亚洲视频 | 国产一级一片免费播放 | 成年女人永久免费观看片 | 色偷偷青青草原在线视频 | 国产在线19禁免费观看国产 | 黑人和黑人激情一级毛片 | 五月月色开心婷婷久久合 | 国产精品午夜波多野结衣性色 | 久久免费视频网 | 91视频观看免费 | 精品视频在线观看 | 色停停| 999福利视频 | 久久久这里只有精品加勒比 | 国产一区免费在线观看 | www.亚洲精品.com | 99久久久久久久 | 日本中文在线三级在线播放 | 国产麻豆高清视频在线第一页 | 99热这里精品 | 欧美精品h在线播放 | 美女女女女女女bbbbbb毛片 | 99热久久这里只有精品在 | 日日碰狠狠添天天爽对白 | 99精品网站| 久久好看视频 | 国产香蕉精品视频在 | 亚洲福利视频精选在线视频 | 青青青国产免费手机视频在线观看 | 国产免费一级片 | 日本欧美在线观看 | 老师粗又长好猛好爽视频 | 国产在线一区二区三区欧美 | 色黄啪啪网18以下免费进 | 国产免费一级高清淫日本片 | 四虎884| 999热精品这里在线观看 | 一级淫片免费视频 | 多多多色麻豆 | 日本免费一区视频 | 亚洲欧美色综合大色 |