日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

设计模式简要笔记

發(fā)布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式简要笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

設(shè)計模式的視頻課程今天算是告一段落,視頻+《大話設(shè)計模式》+ GoF的粗淺學(xué)習(xí),還需要日后的練習(xí)應(yīng)用。學(xué)習(xí)期間留下一段雜亂摘要筆記,供自己溫故知新和增刪整改。


=====================================================================================

0. 單項溝通:A為B服務(wù),則A需要知道B能干什么,但B不需要知道A;不要跨越層次調(diào)用功能
0. 語言以外的接口,指的是類的對外的行為,比如公開方法屬性事件索引器

0. 工廠:將復(fù)雜的創(chuàng)建與表現(xiàn)(使用)分離,客戶端類不知道他所必須創(chuàng)建的對象的具體類的時候,只創(chuàng)建父類對象,具體多態(tài)成哪種具體類,交給工廠

------------------------ 創(chuàng)建型 ----------------------------------
0. 工廠方法:產(chǎn)品父類,產(chǎn)品子類;工廠父類,工廠子類。增加新產(chǎn)品就需要增加新的產(chǎn)品子類和新的工廠子類,平行繼承問題,無法解決。

1. 【唯一】:單例模式:唯一,全局訪問點
  1)餓漢:靜態(tài)先創(chuàng)建;懶漢:調(diào)用再創(chuàng)建
  2)多線程訪問:加線程鎖Lock,兩層判斷null,第一層為性能,第二層為判斷
  3)單例和靜態(tài)類在內(nèi)存中都只有一個對象,單例對象可釋放,靜態(tài)只能等程序結(jié)束才可釋放

2. 【多選一】簡單工廠:。多個類型選擇一個來創(chuàng)建,將創(chuàng)建對象的職責(zé)委托給一個全局創(chuàng)建點
  1)創(chuàng)建多個實例,可能用到switch的情況,提取出來放到工廠類。一類產(chǎn)品的創(chuàng)建交給一個工廠來做。
  2)不用switch,依賴注入(構(gòu)造子注入、設(shè)值注入、配置注入),所依賴的東西由外界(客戶端)傳進(jìn)來。如應(yīng)該創(chuàng)建“什么類型”的實例,類型用反射來提供。
  3)工廠生成的是產(chǎn)品,創(chuàng)建者生成的是部件。

3. 【系列】:抽象工廠:多選多。
  1)抽象工廠創(chuàng)建產(chǎn)品1產(chǎn)品2,子工廠按照系列化來生產(chǎn)特定系列的產(chǎn)品1產(chǎn)品2
  2)抽象工廠不派生,工廠中增加系列字段,利用反射來創(chuàng)建產(chǎn)品1產(chǎn)品2
  3)工廠生成的是產(chǎn)品,創(chuàng)建者生成的是部件。

4. 【克隆】:原型模式:克隆對象,.Net可直接實現(xiàn)ICloneable接口,其他平臺需手寫IClone<>接口
  0)適用性:當(dāng)一個系統(tǒng)應(yīng)該獨立于他的產(chǎn)品創(chuàng)建、構(gòu)成、表示時,要使用原型模式
  1)當(dāng)要實例化的類是在運行時刻指定,比如動態(tài)裝載,或者
  2)為了避免創(chuàng)建一個與產(chǎn)品類層次平行的工廠類層次時,或者
  3)當(dāng)一個類的實例只能有幾個不同狀態(tài)(成員賦值)組合中的一種時。建立相應(yīng)數(shù)目的原型并克隆。
  4)淺拷貝、深拷貝
  5)需要深拷貝的引用型成員,其類型也應(yīng)該實現(xiàn)ICloneable接口

5. 【組裝】:創(chuàng)建者(生成器)模式:創(chuàng)建復(fù)雜對象(成員也有類等),結(jié)構(gòu)穩(wěn)定,組成結(jié)構(gòu)的具體對象是變化的
  0)例如:同樣是車構(gòu)造,不同品牌部件不同;同樣是8件套裝,T1和T2
  1)同樣的構(gòu)建過程可以創(chuàng)建不同的表示
  2)創(chuàng)建、構(gòu)建(組裝)、表示(客戶)分開;構(gòu)建過程是穩(wěn)定的,有新增套裝則新增生成器
  3)工廠生成的是獨立的產(chǎn)品,創(chuàng)建者生成的是套裝的部件。

------------------------ 結(jié)構(gòu)型 ----------------------------------

6. 【轉(zhuǎn)接】適配器模式:對象復(fù)用,新舊兼容
  1)功能一致的兩個類,接口不同,不可直接復(fù)用,增加適配器類進(jìn)行接口包裝轉(zhuǎn)換,使可以兼容
  2)預(yù)先合理設(shè)計、發(fā)現(xiàn)問題及時重構(gòu),可以避免使用適配器
  3)類適配器通過多重繼承實現(xiàn),.Net java等不支持
  4)對象適配器
  5)例子:Resources.Load類,傳參和返回與需求不符,增加ResourcesManager類,對其進(jìn)行包裝
  6)例子:技能外觀類中,無參施放方法包裝了有參施放方法,并復(fù)用了skillManager

7. 【向?qū)А客庥^模式:組織系統(tǒng),簡化調(diào)用
  0)對內(nèi)高內(nèi)聚,對外低耦合
  1)為子系統(tǒng)中的一組接口提供一個一致的界面,定義了一個高層接口,這個接口讓子系統(tǒng)更易用
  2)外觀模式可有可無;簡化客戶調(diào)用;解耦客戶端與實現(xiàn)子類間的依賴性;層次結(jié)構(gòu)(比如MVC)中定義每一層子系統(tǒng)入口,子系統(tǒng)之間相互依賴則可讓子系統(tǒng)通過外觀通信
  3)個人炒多支股票是一組子系統(tǒng),購買基金間接買賣股票是外觀
  4)例子:技能外觀類中,AttackUseSkill

8. 【連接】橋接模式:依賴抽象,連接兩端的變化
  1) 將抽象部分與實現(xiàn)部分分離,使他們可以獨立變化;解決排列組合的情況
  2) 例子:技能施放器,選擇目標(biāo)的算法() 與 施放技能的模式() 都可能變化

9. 【包裝】裝飾模式:動態(tài)為對象(而不是類)增加額外功能,接口要一致;將主要方法以串聯(lián)方式逐一增加給主目標(biāo)(一層層裝飾)
  1)不更換引用,不更換接口:所以具體組件類和裝飾器類都要繼承同一個組件父類,同事裝飾器要聚合父類;具體裝飾器要保留父類功能,再新增自己的功能
  2)如果沒有共同的組件父類,可讓具體組件類作為裝飾器類的父類
  3)裝飾器聚合父類,可用構(gòu)造方法傳入,可用Set傳入
  4)在裝飾器類中加入拆包裝功能:一層層包裝,一層層拆包裝
  5)給對象加功能,不考慮統(tǒng)一的接口,可以使用委托回調(diào)
  6)行為疊加就疊加方法,數(shù)據(jù)疊加就疊加值
  7)例子:StreamReader(new FileStream),用StreamReader包裝一個FileStream對象
  8)例子:不影響行為,影響數(shù)值的裝飾:角色 + 裝備
  9)適用性
    1>不影響其他對象的情況下,動態(tài)、透明地給單個對象添加職責(zé)
    2>處理可以撤銷的職責(zé)
    3>不能采用派生的方法來擴(kuò)充時

10. 【樹】組合模式:樹形層次關(guān)系
  1)樹枝無限層次實現(xiàn),自己包含自己:List<ThisClass> list;樹葉不包含自己。
  2)不讓客戶為難,所以樹葉和樹枝都繼承于根
  3)簡化版,現(xiàn)有層次,再判斷枝葉;無分支則認(rèn)為是Leaf,TreeNode類,List<TreeNode> list, IsLeaf{get{return nodes.Count == 0;}}
  4)例子:電商的商品類別,無限層次,增加父類別編號屬性
  5)例子:固定類別層次

11. 【幌子】代理模式
  1)對一個對象進(jìn)行訪問控制
  2)適用性
    1>遠(yuǎn)程代理:本地創(chuàng)建代理訪問遠(yuǎn)程
    2>虛代理:根據(jù)需要創(chuàng)建開銷很大的對象的代理(縮略圖、壓縮)
    3>保護(hù)代理:控制對原始對象的訪問,對象擁有不同的訪問權(quán)限
    4>智能指引:取代了簡單的指針,訪問對象時執(zhí)行一些附加操作
      1)對指向?qū)嶋H對象的引用計數(shù),該對象無引用時可以自動釋放 (GC)
      2)第一次訪問一個持久化對象,將其放入內(nèi)存(緩存)
      3)訪問一個實際對象前,確定其是否已被鎖定,確保其他對象不可修改他(lock)
  2. 例子:立即可查看的小圖片,代理真正的大圖

12. 享元模式

------------------------ 行為型 ----------------------------------

13. 【通知,自動更新】觀察者模式:一對多交互,依賴倒置,抽象通知者,抽象觀察者。
  1)事件為發(fā)布者,事件注冊即為添加觀察者
  2)例子:事件,一對多的通知,一方通知,多方訂閱;通知者不知道都誰訂閱,訂閱者互相不認(rèn)識,訂閱后行為不盡相同。
  3)Attach、Detach,用List放觀察者;注冊、減注冊,用event注冊觀察者

14. 【交流平臺】中介者模式:多對多交互,中介調(diào)停者
  1)例子:聯(lián)合國抽象中介者,聯(lián)合國安理會具體中介者,國家抽象參與者,中美具體參與者

15. 【切換算法】策略模式:關(guān)注算法切換的問題,無前置條件,就是改變
  1)算法獨立封裝,可相互替換,獨立于客戶;客戶依賴于抽象策略接口
  2)例子:不同崗位算工資,封裝不同算法
  3)例子:攻擊選擇器,封裝選擇算法

16. 【狀態(tài)決定行為】狀態(tài)模式:對象狀態(tài)變化時改變他的行為,有條件地改變,如升級了就跑著走
  1)模式結(jié)構(gòu)與策略模式相同,引入委托/事件 回調(diào)

17. 【骨架】模板方法:定義一個操作中的算法骨架,將特定步驟延遲到子類。
  1)就是模板,在父類中最大化提煉代碼,派生類只寫不同的地方
  2)模板方法用抽象方法或虛方法
  3)骨架、調(diào)用邏輯為模板,具體實現(xiàn)和細(xì)節(jié)交給派生類

18. 備忘錄:記錄一個對象的臨時狀態(tài),游戲存檔

19. 迭代器:提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露該對象的內(nèi)部表示
  1)結(jié)構(gòu):First(), Next(), IsDone(), CurrentItem()
  2)例子:Foreach、yield return、IEnumerator

20. 職責(zé)鏈

21. 命令模式

22. 解釋器

23. 訪問者

?

轉(zhuǎn)載于:https://www.cnblogs.com/gameobject/p/7811683.html

總結(jié)

以上是生活随笔為你收集整理的设计模式简要笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。