欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

gof設(shè)計(jì)模式回顧

系統(tǒng) 1918 0

gof23根據(jù)講師學(xué)習(xí)筆記回顧:

1.gof:Gang of Four;叫g(shù)rasp更具有針對(duì)性,解決具體的問(wèn)題;

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

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

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

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

State狀態(tài)、Strattegy策略、Vistor訪問(wèn)者

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

1.意圖:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)該實(shí)例的全局訪問(wèn)點(diǎn);

2.sealed;禁止繼承,私有靜態(tài)變量,私有構(gòu)造函數(shù)(防止實(shí)例化),公共靜態(tài)屬性

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

4.c#特有屬性satic構(gòu)造函數(shù),只執(zhí)行一次,可以把創(chuàng)建實(shí)例任務(wù)交給他來(lái)做

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

6.C#終極單例:利用嵌套類的靜態(tài)構(gòu)造函數(shù);

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

?

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

1.動(dòng)機(jī):一個(gè)復(fù)雜對(duì)象的創(chuàng)建通常有各個(gè)部分的子子對(duì)象用一定的算法構(gòu)成,由于需求多的

?????? 的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)子部分經(jīng)常面臨劇烈的變化,但是組合在一起的算法卻相對(duì)穩(wěn)定。

2.蓋房子案例;

3.主要用于分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象,分步驟是一個(gè)穩(wěn)定的算法;體現(xiàn)了封裝性;

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

?

---------簡(jiǎn)單工廠:

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

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

?

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

1.某個(gè)對(duì)象的創(chuàng)建由于需求的變化經(jīng)常面臨劇烈的變化,但卻擁有比較穩(wěn)定的接口

2.他將一個(gè)類的創(chuàng)建延遲到了子類;

3.為工廠添加子類,而每個(gè)子類負(fù)責(zé)創(chuàng)建具體的產(chǎn)品。工廠里氏替換,得到具體工廠再得到產(chǎn)品;

4.案例:磨具和玩具;

5.適用性:1.不知道多要?jiǎng)?chuàng)建對(duì)象類的時(shí)候、希望有他的子類創(chuàng)建、希望通過(guò)配置文件來(lái)指定;

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

7.個(gè)人可以理解,三層中抽象工廠,解決數(shù)據(jù)庫(kù)的切換,是一個(gè)縱向的過(guò)程,而工廠方法是一個(gè)橫向的過(guò)程;

?

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

1.面臨兩個(gè)維度:產(chǎn)品的種類(三層中的接口的種類),產(chǎn)品系列(三層中的數(shù)據(jù)庫(kù)切換種類)

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

3.這里注意一下反射技術(shù):

(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.意圖:使用原型實(shí)例來(lái)指定創(chuàng)建對(duì)象的種類,然后通過(guò)拷貝這些原形來(lái)創(chuàng)建新的對(duì)象。

2.在類的內(nèi)部實(shí)例化自己想外部提供。這樣就將自己復(fù)制了出來(lái);

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

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

4.深復(fù)制淺復(fù)制的區(qū)別:實(shí)際上是引用類型的copy是對(duì)象還是只是地址;解決的話,那么還得讓引用類型

? 也進(jìn)行復(fù)制,將復(fù)制的值給到新對(duì)象的變量即可;

?

---------以上創(chuàng)建型完畢

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

1.個(gè)人認(rèn)為是解決的是接口轉(zhuǎn)換問(wèn)題;如何將一些現(xiàn)存對(duì)象在新的接口環(huán)境下還能使用;

?

---------橋接

1.意圖:將抽象部分與實(shí)現(xiàn)部分分離,是他們都可以獨(dú)立的變化。

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

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

3.體現(xiàn)了復(fù)用原則;針對(duì)接口編程;實(shí)現(xiàn)了抽象與實(shí)現(xiàn)相分離;

4.使用兩個(gè)非常強(qiáng)的變化維度;

?

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

1.具備容器特征的對(duì)象,類似自己聚合自己層層嵌套,和容易想起樹(shù)形控件、和遞歸調(diào)用;

2.為了讓一個(gè)復(fù)雜的對(duì)象處理起來(lái)就像處理一個(gè)簡(jiǎn)單的對(duì)象;

?

?

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

1.動(dòng)機(jī):通過(guò)繼承來(lái)擴(kuò)展對(duì)象的功能,由于繼承引入了靜態(tài)特性,使之缺乏靈活性,但是如果動(dòng)態(tài)

? 添加功能則很靈活。

2.兩層抽象;

3.實(shí)現(xiàn)了動(dòng)態(tài)的擴(kuò)展功能,可以創(chuàng)建不同行為組合,體現(xiàn)出順序;

4.缺點(diǎn),會(huì)使用比繼承更多的對(duì)象,變得錯(cuò)中復(fù)雜;

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

?

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

1.說(shuō)白了就是門面,為子系統(tǒng)的一組接口提供一致的界面

2.不僅簡(jiǎn)化了組件系統(tǒng)的接口而且也達(dá)到了一種解耦效果。

3.外觀:簡(jiǎn)化接口;適配器:轉(zhuǎn)化接口;橋接:分離接口與實(shí)現(xiàn)(兩個(gè)維度);裝飾:有穩(wěn)定接口的前提下為對(duì)象擴(kuò)展功能;

?

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

1.表面似乎和單例達(dá)到效果差不多,但有區(qū)別的。

2.主要解決因大量細(xì)粒度的對(duì)象會(huì)充斥整個(gè)系統(tǒng),占用大量?jī)?nèi)存;

3.當(dāng)對(duì)象被頻繁使用時(shí),可以把他們聚合起來(lái),成為共享的,當(dāng)再次調(diào)用,直接調(diào)用,不必重新new;

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

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

6.降低系統(tǒng)對(duì)象的個(gè)數(shù),降低內(nèi)存壓力;但使復(fù)雜程度增加;

7.考慮是否值得,當(dāng)對(duì)象太少的話,而使用享元得不償失;

?

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

1.為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn);體現(xiàn)了一種封裝思想;

2.代理,與適配器區(qū)別:代理主要是控制對(duì)對(duì)象訪問(wèn)的復(fù)雜度;

3.比如webservice中有代理類,封裝了網(wǎng)絡(luò)數(shù)據(jù)傳輸解析等,而使得訪問(wèn)特別方便;

?

----------以上結(jié)構(gòu)型完畢

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

1.動(dòng)機(jī):對(duì)于某一項(xiàng)任務(wù),常常有穩(wěn)定的整體操作結(jié)構(gòu),但子部分有很多改變的需求;

2.它是子類可以不改變一個(gè)算法的結(jié)構(gòu)重定義該算法的某些特定步驟。

3.父類封裝了固定算法方法,并定義子虛方法,兒子類實(shí)現(xiàn)父類重寫(xiě)虛方法達(dá)到變更步驟細(xì)節(jié)效果。

4.比如造房子步驟都一樣的,把步驟順序和步驟抽象出來(lái),讓各種類型房子實(shí)現(xiàn)即可,不變的是步驟,變? 化的是步驟內(nèi)部的東西,而這些由子類來(lái)重寫(xiě);

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

6.一次性實(shí)現(xiàn)一個(gè)算法的不變部分,將可變的行為留給子類來(lái)實(shí)現(xiàn)。子類的公共行為應(yīng)該提取給父類,防止重復(fù);

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

?

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

1.動(dòng)機(jī):行為請(qǐng)求者和行為實(shí)現(xiàn)者呈現(xiàn)一種緊耦合,比如頁(yè)面按鈕點(diǎn)擊事件;

2.意圖:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,將行為對(duì)象化,使得可操作,比如排隊(duì)、撤銷;

3.將命令行為抽象成對(duì)象,而這個(gè)對(duì)象負(fù)責(zé)執(zhí)行傳過(guò)來(lái)對(duì)象的某種行為,這樣再聚合一系列的命令對(duì)象,

? 這樣便可以讓命令排隊(duì),撤銷,全部執(zhí)行等操作;

4.可以是多個(gè)請(qǐng)求進(jìn)行記錄、排隊(duì)、撤銷、同意執(zhí)行;命令可以將狀態(tài)保存;

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

6.將命令序列化,驚醒網(wǎng)絡(luò)傳輸;

7.組合模式+命令模式=符合命令;層層執(zhí)行;

8.過(guò)多的命令,就是這種模式不切實(shí)際;

9.和委托類型,注意區(qū)別;命令更加嚴(yán)謹(jǐn);

?

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

1.動(dòng)機(jī):某一特定領(lǐng)域的問(wèn)題比較復(fù)雜,類似的謀士不斷重復(fù)出現(xiàn)。

2.可以把重復(fù)出現(xiàn)的行為抽象出來(lái)形成特定的語(yǔ)法規(guī)則;

3.定義一種解釋器,來(lái)解釋語(yǔ)言中的句子;

4.提供了一個(gè)簡(jiǎn)單的方式來(lái)執(zhí)行語(yǔ)法,容易修改和擴(kuò)展語(yǔ)法;

5.實(shí)際就是將解釋過(guò)程、轉(zhuǎn)換過(guò)程抽象出來(lái)而已。

?

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

1.多個(gè)對(duì)象相互交互會(huì)有復(fù)雜的引用關(guān)系,但遇變更很難更改;難以重用復(fù)用;

2.可以是一個(gè)中介對(duì)象來(lái)管理這種交互,好比公司找員工,員工找公司,就會(huì)錯(cuò)綜復(fù)雜,如果

雙方都照中介的話,有中介交互,就有多對(duì)多轉(zhuǎn)化為了一對(duì)多,和一對(duì)多關(guān)系。

3.達(dá)到一種松散耦合目的;

4.案例:國(guó)家和聯(lián)合國(guó)的關(guān)系;

5.將多個(gè)對(duì)象間復(fù)雜的關(guān)聯(lián)關(guān)系解耦,將多對(duì)對(duì)關(guān)聯(lián),轉(zhuǎn)變?yōu)榱硕鄬?duì)一個(gè)終結(jié)者關(guān)聯(lián);

7.終結(jié)者,聚合多有對(duì)象,當(dāng)一個(gè)對(duì)象要通知其他對(duì)象時(shí),遍歷即可;

?

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

1.對(duì)于一個(gè)集合,我們關(guān)心的第一,數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)第二遍歷數(shù)據(jù);

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

3.抽象出一個(gè)迭代類負(fù)責(zé),既不暴露集合內(nèi)部結(jié)構(gòu),又能是外面訪問(wèn)。開(kāi)閉原則;

4.1.順序訪問(wèn)集合元素2.不暴露對(duì)象內(nèi)部;

5.集合對(duì)象對(duì)外提供一個(gè)迭代器類;集合對(duì)象類和迭代器類之間是雙向應(yīng)用;

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

7.foreach迭代器原理,在使用foreach,集合應(yīng)該是只讀的,不應(yīng)該在內(nèi)部做相應(yīng)的操作。應(yīng)該使用

for循環(huán);

-----------職責(zé)連模式:

1.動(dòng)機(jī):一個(gè)請(qǐng)求可能被多個(gè)對(duì)象進(jìn)行處理,但是每個(gè)請(qǐng)求在運(yùn)行時(shí)只能有一個(gè)接受者,如果顯示

的指定,就會(huì)形成緊耦合;

3.比如員工請(qǐng)假,根據(jù)請(qǐng)假天數(shù),層層往上傳遞申請(qǐng);

4.適用場(chǎng)合:一個(gè)請(qǐng)求可能有多個(gè)接受者,但最后真正接受者只有一個(gè)。

5.職責(zé)連目的是將請(qǐng)求發(fā)送者和請(qǐng)求接受者解耦;可動(dòng)態(tài)添加修改請(qǐng)求的接受者

?

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

1.體現(xiàn)一種通知依賴關(guān)系;

2.定義對(duì)象間的一對(duì)多依賴關(guān)系,以便當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知

并自動(dòng)更新。

3.被觀察這聚合觀察者,而觀察者又關(guān)聯(lián)被觀察者。

4.注意.net中事件委托,委托充當(dāng)了抽象的observer接口,而提供事件的對(duì)象充當(dāng)了目標(biāo)對(duì)象。

?

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

1.讓人想起游戲進(jìn)度保存進(jìn)度讀取,

2.動(dòng)機(jī):對(duì)象的狀態(tài)在轉(zhuǎn)換過(guò)程中需要回溯之前某個(gè)狀態(tài);

3.如何實(shí)現(xiàn)對(duì)象的狀態(tài)的良好保存和回溯,但又不會(huì)因此破壞對(duì)象本身的封裝性;

4.實(shí)際上是將狀態(tài)保存到對(duì)象中,然后在由管理者聚合這些狀態(tài),根據(jù)標(biāo)識(shí)存取這些對(duì)象;

?

-----------狀態(tài)

1.動(dòng)機(jī):如何在運(yùn)行時(shí)根據(jù)對(duì)象的狀態(tài)來(lái)透明的更改對(duì)象的行為;而不為對(duì)象的操作和狀態(tài)轉(zhuǎn)化引入緊耦合。

2.允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí),改變他的行為,貌似是不同的對(duì)象;

3.表現(xiàn)為將狀態(tài)抽象,而將不同的行為放在子對(duì)象中。

4.將所有與一個(gè)特定狀態(tài)的相關(guān)的行為放入一個(gè)state的子類,在對(duì)象狀態(tài)切換時(shí),切換相應(yīng)的對(duì)象,同時(shí)

維持state的接口,這樣實(shí)現(xiàn)了具體的操作與狀態(tài)轉(zhuǎn)換之間的解耦。

?

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

1.某些對(duì)象使用的算法可能多種多樣,經(jīng)常改變。直接寫(xiě)到對(duì)象中有些復(fù)雜。

2.如何在運(yùn)行時(shí),來(lái)動(dòng)態(tài)改變算法。

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

?

----------訪問(wèn)者:最后一種:

1.再不改變類的層次結(jié)構(gòu)的前提下透明的為類層次結(jié)構(gòu)(被訪問(wèn)者)上的各個(gè)類動(dòng)態(tài)的添加新的操作。

2.表現(xiàn)為,調(diào)度這聚合被訪問(wèn)的對(duì)象,之后遍歷對(duì)象接受訪問(wèn)者的訪問(wèn),對(duì)象在接受

訪問(wèn)時(shí),把自己關(guān)聯(lián)到訪問(wèn)者的內(nèi)部。

3.體現(xiàn)的是雙向關(guān)聯(lián),通過(guò)雙重分發(fā)來(lái)實(shí)現(xiàn)在不改變對(duì)象類層次結(jié)構(gòu)的前提下,在運(yùn)行時(shí)

透明的為類層次結(jié)構(gòu)上的各個(gè)類動(dòng)態(tài)添加新的操作。

4.缺點(diǎn):一旦對(duì)象結(jié)構(gòu)類發(fā)生改變,比如增加,那每一個(gè)訪問(wèn)者都必須得到通知。代價(jià)很大

?

gof設(shè)計(jì)模式回顧


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 天天拍天天干 | 污的网站在线观看 | 午夜亚洲福利 | 一区二区三区波多野结衣 | 91短视频免费在线观看 | 久久一日本道色综合久久m 亚洲三级视频 | 狠狠色狠狠色综合久久第一次 | 91精品国产露脸在线 | 在线观看特色大片免费网站 | 99re视频在线观看 | 国内久久 | 91久久精品一区二区三区 | 日韩做A爰片久久毛片A片 | 成人毛片视频在线观看 | 看黄色毛片 | 久久只有这里有精品 | 日韩久草 | 日韩精品一区二区三区中文 | 大学门卫老秦无删减版txt | 国产视频在线免费观看 | 视频精品一区 | 韩国在线精品福利视频在线观看 | 国产一区www| www.日日日| 亚洲欧美日韩综合二区三区 | 色婷婷国产精品欧美毛片 | 亚洲久草| 国99久9在线 | 免费 | 91不卡在线 | 91免费在线播放 | 成年人在线观看视频 | 色婷婷综合久久久中文一区二区 | 成人久久18免费软件 | 成年网站在线看 | 草草视频手机在线观看视频 | 56av国产精品久久久久久久 | 国产精品国产a级 | 国产一区在线免费观看 | 欧美九九 | 国产高清在线观看 | 欧美精品影视 |