1. 程式人生 > >(1)設計模式初窺

(1)設計模式初窺

1 前言
有些人可能會問,我也能實現某某功能,為什麼要花時間來學習設計模式。今天我們就來了解一下設計模式的優勢:

程式(包括物件和類),如果在設計中使用了設計模式,將來將更易於複用與擴充套件,更易於變更。而且基於設計模式的程式會更加簡潔而高效,因為達到同樣目的的所需程式碼行數會更少。

接下來就讓我們一起走入神奇的設計模式的世界來體會其給我們帶來便利。

2 詳述
記得之前文章我們介紹了Cocoa Touch的MVC模式,而他並非最基本的設計模式,它包含了若干更加基本的設計模式:組合(Composite),命令(Command),中介者(Mediator),策略(Strategy)和觀察者(Observe)

2.1 幾種常見設計模式介紹
2.1.1 組合:
檢視物件之間以協作的方式構成一個檢視層次體系,其中既可以有複合檢視(比如表格檢視),也可以有獨立檢視(比如文字框或按鈕)。每個層次的每個檢視節點都可以影響使用者的操作並把自己繪製到螢幕上。

2.1.2 命令:
這是一種“目標-動作”機制,檢視物件可以推遲其他物件(比如控制器)的執行,讓其他物件等到發生了某些事件後再執行。

2.1.3 中介者:
控制器物件起著中間人的作用,它構成了在模型和檢視物件之間傳遞資料的雙向通道。應用程式的控制器物件將模型的變更傳達給檢視物件。

2.1.4 策略:
控制器是檢視物件的一個“策略”,檢視物件將自身隔離,以期維持其作為資料展示器的唯一職責,而將一切應用程式特有的介面行為的決定委派給它的“策略”物件(即控制器)。

2.1.5 觀察者:
模型物件向它所關注的控制器等物件發出內部狀態變化的通知。

2.2 協議與抽象類
2.2.1 針對介面程式設計
針對介面程式設計,而不是針對實現程式設計。

介面繼承與類繼承:

介面繼承(子型別化):讓我們可以用一個物件代替另一個物件。

類繼承:通過複用父類的功能或者只是簡單的共享程式碼和表述,來定義物件的實現和型別的一種機制。

定義具有相同介面的類群很重要,因為多型是基於介面的。Objective-C種有一種,確定了客戶端同所用的具體類之間的一種“合約”的東西,叫做協議(protocol)。協議也是物件之間的一種合約,但是本身不能例項化偉物件。實現協議或者從抽象類繼承,使得物件共享相同的介面。

通常的做法是:在客戶端的程式碼中不宣告特定具體類的變數,而只是使用協議或者抽象類定義的介面。

2.2.2 @protocol與抽象基類
協議的語法為@protocol,並不定義任何實現,而只是宣告方法(method),以確定符合協議的類的行為。只定義了抽象行為的“介面”。實現協議的類定義這些方法的實現,以執行真正的操作。

另一種定義高度抽象型別的方法是定義抽象基類(Abstract Base Class,ABC)。通過抽象基類,我們可以生成一些其他自雷可以共享的預設行為。

協議中可以用@optional指令(directive)將協議部分方法變更為“可選的”。

如果客戶端要使用由協議所定義型別的物件,比如有個協議叫Mark,則需要使用:

id<Mark>thisMark;

如果Mark被宣告為抽象基類,那麼語法應該分其他類一樣:

Mark* thisMark;

Objective-C不支援多重繼承,所以要用協議來進行擴充套件。

優先使用協議而不是類繼承。

相關推薦

1設計模式

1 前言 有些人可能會問,我也能實現某某功能,為什麼要花時間來學習設計模式。今天我們就來了解一下設計模式的優勢: 程式(包括物件和類),如果在設計中使用了設計模式,將來將更易於複用與擴充套件,更易於變更。而且基於設計模式的程式會更加簡潔而高效,因為達到同樣目的的所需程

設計模式1--工廠模式

工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的物件。 介紹 意圖:定義一個建立物件的介面

C#設計模式1——設計原則

設計原則 使用設計模式的根本原因是適應變化,提高程式碼複用率,使軟體更具有可維護性和可擴充套件性。在進行設計的時候,我們需要遵循以下幾個原則:單一職責原則、開閉原則、里氏替代原則、依賴倒置原則、介面隔離原則、合成複用原則和迪米特法則。 1.單一職責原則   專業的人做專業的事,面向物件程式設計中類也是一

設計模式1—策略模式

0.什麼是設計模式? 我們經常使用被人設計好的庫和框架,利用他們的API(Application Programming Interface)編寫我們的程式,但是我們得把它們“組合”起來。像小孩搭積木一樣,建成自己的大廈。其中你用到的“方式”,都是事先存在你腦海中的,這些“方式”都是抽象的

設計模式C++實現1——工廠模式

       軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了面向物件程式語言的重要特性:封裝、繼承、多型,真正領悟設計模式的精髓是可能一個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用C++寫了個小例子,加深一下理解。主要參考《大話設計模式》

設計模式六大原則1:單一職責原則

定義:不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責。 問題由來:類T負責兩個不同的職責:職責P1,職責P2。當由於職責P1需求發生改變而需要修改類T時,有可能會導致原本執行正常的職責P2功能發生故障。 解決方案:遵循單一職責原則。分別建立兩個類T1

設計模式1:單例模式

定義:確保一個類只有一個例項,而且自行例項化並向整個系統提供這個例項。 型別:建立類模式 類圖: 類圖知識點: 1.類圖分為三部分,依次是類名、屬性、方法 2.以<<開頭和以>>結尾的為註釋資訊 3.修飾符+代表public,-代表p

@WhiteTaken設計模式學習——享元模式

ken import 都是 什麽 com str 字段 浪費 -- 繼續學習享元模式。。。 乍一看到享元的名字,一頭霧水,學習了以後才覺得,這個名字確實比較適合這個模式。 享元,即共享對象的意思。   舉個例子,如果制作一個五子棋的遊戲,如果每次落子都實例化一個對象的話

@WhiteTaken設計模式學習——代理模式

imp 模式 ati lan public eth object 靜態代理 out 今天學習了一下代理模式,代理模式分為很多種。目前感覺有兩種是需要學習一下的。 靜態代理模式 動態代理模式 1. 靜態代理模式   需要被代理的類,實現一個或者多個接口。   代理類需要實

@WhiteTaken設計模式學習——組合模式

合成 concrete cnblogs java mil 使用 for -- 總公司 下面來學習一下組合模式。 組合模式概念是什麽呢。從別的地方抄來了一些理論。 理論:將對象組合成樹形結構以表示“部分-整體”的層次結構。Composite模式使得用戶對單個對象和組合對象的使

設計模式——策略模式

提高 {} xiang 有一個 ble 問題 其它 add 新的 轉載地址:http://blog.csdn.net/lifuxiangcaohui/article/details/8065059 這篇文章講述的策略模式非常棒,在此轉載。 設計模式; 一個程序員對設計模

設計模式六大原則詳細 設計模式六大原則

設計模式六大原則 轉自https://www.cnblogs.com/shijingjing07/p/6227728.html 1.設計模式的目的設計模式是為了更好的程式碼重用性,可讀性,可靠性,可維護性。 2.常用的六大設計模式1)單一職責原則2)里氏替換原則3)依賴倒轉原則4)介面

Java程式設計師從笨鳥到菜鳥之三十二大話設計模式設計模式分類和三種工廠模式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

設計模式0—— 設計模式基石 —— 軟體設計七大原則

軟體設計七大原則。在面向物件軟體開發過程中,我們適當的遵循一定的設計原則,對於開發來說,能夠提高程式碼的健壯性,複用性,可維護性。同時利於團隊協作交流。 本文中的部分原則給出一個特定場景和具體程式碼實現。其它的設計原則貼出他人寫的博文地址。 1. 開閉

設計模式之迭代器模式Iterator

前言: 參考圖書:軟體設計模式與體系結構 參考部落格:https://www.cnblogs.com/wanson/articles/9277813.html   正題:         迭代器(iterator)有時又稱遊標

設計模式之抽象工廠模式

前面已經說過了簡單工廠模式和普通工廠模式:連結 前沿: 參考圖書:《軟體設計模式與體系結構》   抽象工廠就是普通工廠模式的加強版本 優點:當一個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的物件。 使用場景: 1、QQ

設計模式之單例模式(singtonMode)

參考文章: (1)https://blog.csdn.net/li295214001/article/details/48135939 (2)http://love-love-l.blog.163.com/blog/static/21078304201001804211901/ (3)h

給出n個學生的考試成績表,每條記錄由學號、姓名和分數和名次組成,設計演算法完成下列操作: 1設計一個顯示對學生資訊操作的選單函式如下所示: *************************

給出n個學生的考試成績表,每條記錄由學號、姓名和分數和名次組成,設計演算法完成下列操作: (1)設計一個顯示對學生資訊操作的選單函式如下所示: *************************        1、錄

設計模式之工廠模式

(一)學習spring中的工廠模式是如何具體來利用工廠模式的 先來看一下基礎知識 簡單工廠模式又叫靜態方法模式 一個抽象產品類,可以派生出多個具體產品類。一個具體工廠類,通過往此工廠的static方

Java程式設計師從笨鳥到菜鳥之三十一大話設計模式設計模式遵循的七大原則

          最近幾年來,人們踴躍的提倡和使用設計模式,其根本原因就是為了實現程式碼的複用性,增加程式碼的可維護性。設計模式的實現遵循了一些原則,從而達到程式碼的複用性及增加可維護性的目的,設計模式對理解面向物件的三大特徵有很好的啟發,不看設計模式,很難深層地體會到面向物件開發帶來的好處 。在剛開始學習