<strike id="kouok"></strike>
  • <abbr id="kouok"></abbr>
    <ul id="kouok"></ul>
    • <ul id="kouok"></ul>

      南京軟件定制開發(fā)

      南京傾心軟件歡迎您訪問本站

      13605185909

      新聞資訊

      NEWS CENTER
      欄目導航

      簡述21種設計模式

      發(fā)布時間:Mar 16, 2021         已有 人瀏覽
      Object-C編程之道》個人感覺是非常好的一本iOS設計模式書籍。
      里面會結合在iOS的Cocoa 框架中使用到的例子進行講解,在學習設計模式的同時,也能對Cocoa框架中使用的設計模式有個熟悉。這一點我非常喜歡。
       
      按照設計模式的功能進行劃分,可以分為八類:
      接口適配類,對象去耦類,對象創(chuàng)建類,抽象集合類,對象狀態(tài)類,行為擴展類,算法封裝類,性能與對象訪問類。其中包含內容如下:
      對象創(chuàng)建型:1.原型模式;2.工廠模式;3.抽象工廠模式;4.單例模式;5.生成器
      接口適配型:1.適配器模式;2.橋接模式;3.外觀模式
      對象去耦型:1.中介者模式;2.觀察者模式
      抽象集合型:1.組合模式;2.迭代器模式
      行為擴展型:1.訪問者模式;2.裝飾器模式;3.責任鏈模式
      算法封裝型:1.模版方法模式;2.策略模式;3.命令模式
      性能與對象訪問型:1.享元模式;2.代理模式
      對象狀態(tài)型:1.備忘錄模式
       
      下面將對書中講解到的設計模式進行簡述。
      建議有時間的同學去通讀和練習一遍。沒有時間的同學就看我下面寫的吧,先做到心里有個概況。等有時間了再去研究。
      后面計劃對里面的每種設計模式進行詳解(二十一種,真不少),想持續(xù)關注的要留心了。
       
      對象創(chuàng)建型
      原型模式:
      簡單的說就是復制,用同一個磨具復制出一系列的東西。
      使用場景有:
      1.創(chuàng)建一個實例流暢復雜,復制比較容易;
      2.創(chuàng)建一個對象子對象組合比較多,復制比較容易;
      應用實例:
      自定義對象實現(xiàn)NSCopy協(xié)議或者NSMutableCopy協(xié)議,實現(xiàn)方法copyWithZone或者mutableCopyWithZone。就是對此設計模式的體現(xiàn)。
       
      工廠模式:
      簡單的說就是在一個類中根據需求,可以生產出多種類型的產品。
      使用場景有:
      類有很多具體的子類,想讓返回什么樣的子類局部化,由內部自行判斷。
      應用實例:
      NSNumber類定義了一系列的工廠方法:
      根據int 生產 intNumber; 根據unsigned int 生產 unsignedNumber;
      + (NSNumber *)numberWithInt:(int)value;
      + (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
       
      抽象工廠模式:
      從產品的角度看,是一種二維的思考。如水果工廠的工廠模式是生產蘋果,橘子。
      而蘋果分為北方工廠產的蘋果,南方工廠產的蘋果。
      從工廠的角度看,比較簡單。抽象工廠下面兩個子工廠,它們都可以生產蘋果,橘子。
      應用實例:
      NSNumber抽象工廠。下面很多具體的number工廠,如:
      + (NSNumber *)numberWithInt:(int)value;
      + (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
       
      單例模式:
      一個類只有一個實例,并提供全局訪問點。
      使用場景有:
      系統(tǒng)只能共享,無法復制的元素。
      應用實例:
      文件系統(tǒng)管理類:整個系統(tǒng)只有一份。
      UIApplication:一個App只有一個應用單例。
       
      生成器模式:
      將一個復雜對象的構建與它的表現(xiàn)分離,使得同樣的構建過程可以創(chuàng)建不一樣的表現(xiàn)對象。
      使用場景:
      構建過程需要用不同的組合構建不同表現(xiàn)的對象。
       
      對于生成一個比較復雜的對象,通常使用生成器模式 里面按照角色劃分有4種:
      客戶端,提出一系列需要,需要什么樣的產品。
      指揮者,從客戶端那里接收到一系列需要,然后按照功能分割。
      構建者,從指揮者手中得到一個需求,并生產一個對于的產品。
       
      對象創(chuàng)建型整體宏觀圖如下:
       
      接口適配型
      適配器模式:
      對象調用接口 -> 適配器 -> 被適配接口,適配器可以使原本不兼容的接口可以一起協(xié)調工作了。
      使用場景:
      已有類的接口與需求類接口不匹配。
      應用實例:
      Delegate是CocoaTouch框架中采用適配器模式(委托)的一種實現(xiàn)。實現(xiàn)協(xié)議的具體類是個適配器。
       
      橋接模式:
      把抽象層次結構從實現(xiàn)中分離出來,使其能夠獨立變更。
      抽象層定義了供客戶端使用的上層抽象接口。
      實現(xiàn)層次結構定義了供抽象層次使用的底層接口。
       
      不想在抽象與其實現(xiàn)之間形成固定的綁定關系;
      客戶端抽象層引用著實現(xiàn)層抽象層;
       
      外觀模式:
      為子系統(tǒng)中一組不同的功能接口,提供統(tǒng)一的外觀服務接口。
      子系統(tǒng)變的越來越復雜,可以使用外觀類為這個子系統(tǒng)提供一個簡單的入口。
       
      接口適配型整體宏觀圖如下: 
       
      對象去耦型
      中介者模式
      一句看概述:封裝對象間的交互。
      中介者模式用于定義一個集中的場所,對象間的交互可以在一個中介者對象內處理, 從而避免其他對象間的依存關系。
      使用場景:
      對象間的交互定義明確而復雜,導致一組對象彼此互相依賴且難以理解。
      使用實例:
      組件化開發(fā)中使用的路由器,就是一個利用反射機制實現(xiàn)的中介者。
       
      觀察者模式
      定義一種一對多的關系,使一個對象狀態(tài)改變,所以觀察者對象都收到通知。
      觀察者模式也叫發(fā)布-訂閱機制。
      可以利用Observer模式,令通知中心為中介,可以做到一個自定義對象通過通知中心 去通知到其他多個對象的目的。
      使用場景:
      在MVC框架模式中,通過觀察著,實現(xiàn)Model,View的聯(lián)動。
       
      對象去耦型整體宏觀圖如下: 
       
      抽象集合型
      組合模式
      組合模式讓我們把相同基類型的對象組合到樹狀結構中,其中父節(jié)點包含同類型的子節(jié)點。
      組件節(jié)點和葉子節(jié)點都是實現(xiàn)同一個基類接口。同一個抽象父類。
      對組合對象的查詢,訪問都是遞歸操作。
      將對象組合成樹形結構,以表示“整體-部分”的層次結構,組合使得用戶對單個對象和組合對象的操作具有一致性。
      使用實例:
      UIView的樹形結構,包含很多子View。
      事件消息鏈,響應鏈傳遞。
       
      迭代器模式
      迭代器提供了一種 順序訪問聚合對象(集合)中元素的方法,而無需暴露結構的底層表示和結構細節(jié)。 遍歷集合元素的任務從集合 轉移給了迭代器對象。
      使用場景:
      需要訪問組合對象內容,而不想暴露內部表示,結構。
      迭代器分為內部迭代器和外部迭代器。
      外部迭代器允許客戶端更自由的使用,同時需要熟悉組合對象的內部結構。
      內部迭代器被封裝在集合內部,在集合外部提供接口。
      使用實例:
      集合對象(nsarray, nsdictionary)都默認提供了迭代器。
       
      抽象集合型整體宏觀圖如下: 
       
      行為擴展型
      訪問者模式
      作用于組合對象結構中的每一個元素的操作,它讓我們在不改變元素類的前提下,擴展這些類的新操作。
      在接受訪問者的接口方法中,實現(xiàn)將元素傳給訪問者,然后訪問者擴展對元素的操作。
      使用場景:
      想對一個對象進行很多不相關的操作,又不想污染這個對象。
       
      裝飾器模式
      向對象添加行為而不破壞其原有的風格,因此增強了的對象是同一個類的加強版。任何“增強”均可以動態(tài)添加和刪除。裝飾對象可以附加到另一裝飾對象,也可以附加到原始對象。
      使用場景:
      在不影響對象的情況下,動態(tài),透明的給單個對象添加職責。
      使用實例:
      濾鏡操作,可以不管濾鏡順序。
       
      責任鏈模式
      讓一組對象處理特定的請求,而對這個組中的成員(處理程序對象handler)增加,刪除不影響組的完整性。
       鏈中的每一個對象實現(xiàn)了同樣的方法,處理對鏈中第一個對象發(fā)起的同一個請求。 如果一個對象不知道如何處理這個請求,就把請求傳給下一個響應器(successor)。
      使用場景:
      向一組對象發(fā)送處理請求,而不想顯示的指定是哪個對象進行處理。
       
      行為擴展型整體宏觀圖如下: 
       
      算法封裝型
      模版方法模式
      在抽象父類中定義操作架構和公共操作,具體操作延遲到子類中實現(xiàn)。
      在模版方法模式中,使子類可以重定義算法的某些特定步驟而不改變算法結構。
      使用場景:
      需要一次性將不變部分寫好,將可變部分留給子類實現(xiàn)。
      使用實例:
      在UIView 中的方法draw:(CGRect)rect方法。
      這個繪圖方法draw:為UIView提供的鉤子函數(shù),當用戶想要自己繪圖時,就可以自己擴展添加。不實現(xiàn)也不影響功能。
       
      策略模式
      在面向對象設計中,將不同的算法分離成不同的類,稱為策略。與這種做法相關的設計模式,稱為策略模式。
      使用場景:
      在平時的函數(shù)中會出現(xiàn)if-else或者switch-case這樣的選擇語句,它們的不同分支下對應的是不同的算法。 而將這些不同的算法封裝成一個個不同的算法對象。實際上就是不同的策略。
      使用實例:
      控制器是視圖的策略類,視圖可以因為控制器不同而展示不同的信息。
       
      命令模式
      在面向對象設計中,把指令封裝在各種命令對象中,命令對象可以被傳遞, 并且在指定時刻被不同客戶的復用,從這一概念精心設計的模式被稱為命令模式。
      使用場景:
      想讓程序支持撤銷恢復功能
      使用實例:
      NSInvocation, NSUndoManager是框架中這個模式的典型應用。
       
      算法封裝型整體宏觀圖如下: 
       
      性能與對象訪問型
      享元模式
      運用共享技術,有效的控制大量細粒度的對象。
      使用場景:
      應用程序中使用大量對象時。
      通過共享減少了多少對象總數(shù)。
      使用實例:
      屏幕上要展示1000朵小花,利用共享可以只用10個imageData對象,1000個坐標對象。
       
      代理模式
      為其他客戶端提供一種代理,來控制對真實對象的訪問。
      遠程代理:用本地對象代替遠程對象。如:發(fā)送網絡時的代理服務器。
      虛擬代理:將代理直接面向客戶端,使客戶端認為操作的虛擬代理就是真實對象。虛擬代理提供占位對象和重型對象。默認使用占位對象,當需要使用重型對象時才加載。
       
      使用實例:
      Object-C不支持多繼承,如果代理對象不是NSObject的子類的話,可以考慮用NSProxy來作為占位或者替代對象。
      盡管NSProxy也是NSObject類型,但是NSProxy的作用就是當代理。
       
      性能與對象訪問型整體宏觀圖如下: 

       

      對象狀態(tài)型
      備忘錄模式
      在不破壞原有封裝的前提下,捕獲一個對象的內部狀態(tài),并在該對象之外保存狀態(tài)。 這樣,之后可將對象恢復到之前的狀態(tài)。將狀態(tài)封裝成對象保存。
      使用場景:
      需要保存對象在某一時刻的狀態(tài)(或部分狀態(tài)),這樣以后就可以恢復到先前的狀態(tài)。
      使用實例:
      Cocoa Touch框架在歸檔,屬性列表序列化,核心數(shù)據中采用了備忘錄模式。
       
      對象狀態(tài)型整體宏觀圖如下: 
      Copyright © 2020-2022 南京傾心軟件技術有限公司 版權所有     蘇ICP備2020070309號-1
      QQ在線咨詢
      13605185909
      返回頂部
      主站蜘蛛池模板: 久久精品国产精品国产精品污| 国产精品特级毛片一区二区三区| 国内精品久久久久影院免费| 国产网红无码精品视频| 日韩欧精品无码视频无删节| 精品9E精品视频在线观看| 国产区精品一区二区不卡中文| 69国产成人综合久久精品| 午夜精品福利视频| 国产综合精品蜜芽| 亚洲国产精品嫩草影院久久| 亚洲AV永久无码精品水牛影视| 国产欧美亚洲精品A| 成人精品一区二区三区| 午夜精品久久久久久影视777| 亚洲av成人无码久久精品| 国产精品高清一区二区三区| 精品四虎免费观看国产高清午夜| 国产精品99精品视频网站| 亚洲成人国产精品| 精品国产v无码大片在线观看| 99久久精品国产综合一区| 亚洲国产高清精品线久久 | 国产精品自拍一区| 国产欧美日韩精品专区| 日韩精品极品视频在线观看免费 | 精品国产一区二区三区免费| 精品无码人妻久久久久久| 亚洲精品乱码久久久久久蜜桃不卡| 国产精品无套内射迪丽热巴| 国产精品成人无码久久久久久| 午夜精品久久久久久久久| 国产综合精品蜜芽| jizzjizz国产精品久久| 亚洲第一区精品日韩在线播放| 91av国产精品| HEYZO无码综合国产精品| 亚洲视频在线精品| 2020最新久久久视精品爱| 久久精品国产精品亚洲毛片| 久久久久亚洲精品天堂久久久久久|