iOS當中的設計模式

  • 代理模式?
    應用場景:當一個類的某些功能需要由別的類來實現,但是又不確定具體會是哪個類實現。?
    優勢:解耦合?
    敏捷原則:開放-封閉原則?
    實例:tableview的 數據源delegate,通過和protocol的配合,完成委托訴求。?
    自定義的delegate

  • 觀察者模式?
    應用場景:一般為model層對,controller和view進行的通知方式,不關心誰去接收,只負責發布信息。?
    優勢:解耦合?
    敏捷原則:接口隔離原則,開放-封閉原則?
    實例:Notification通知中心,注冊通知中心,任何位置可以發送消息,注冊觀察者的對象可以接收。?
    kvo,鍵值對改變通知的觀察者。

  • MVC模式?
    應用場景:是一中非常古老的設計模式,通過數據模型,控制器邏輯,視圖展示將應用程序進行邏輯劃分。?
    優勢:使系統,層次清晰,職責分明,易于維護?
    敏捷原則:對擴展開放-對修改封閉?
    實例:model-即數據模型,view-視圖展示,controller進行UI展現和數據交互的邏輯控制。如下圖所示:?
    MVC

  • 單例模式?
    應用場景:確保程序運行期某個類,只有一份實例,用于進行資源共享控制。?
    優勢:使用簡單,延時求值,易于跨模塊?
    敏捷原則:單一職責原則?
    實例:[UIApplication sharedApplication]。?
    注意事項:確保使用者只能通過 getInstance方法才能獲得,單例類的唯一實例。?
    Java,C++中使其沒有公有構造函數,私有化并覆蓋其構造函數。?
    object c中,重寫allocWithZone方法,保證即使用戶用 alloc方法直接創建單例類的實例,?
    返回的也只是此單例類的唯一靜態變量。

  • 工廠模式?
    應用場景:工廠方式創建類的實例,多與proxy模式配合,創建可替換代理類。?
    優勢:易于替換,面向抽象編程,application只與抽象工廠和易變類的共性抽象類發生調用關系。?
    敏捷原則:DIP依賴倒置原則?
    實例:項目部署環境中依賴多個不同類型的數據庫時,需要使用工廠配合proxy完成易用性替換?
    注意:項目初期,軟件結構和需求都沒有穩定下來時,不建議使用此模式,因為其劣勢也很明顯,增加了代碼的復雜度,增加了調用層次,增加了內存負擔。所以要注意防止模式的濫用。

  • 策略模式?
    應用場景:定義算法族,封裝起來,使他們之間可以相互替換。?
    優勢:使算法的變化獨立于使用算法的用戶?
    敏捷原則:接口隔離原則;多用組合,少用繼承;針對接口編程,而非實現。?
    注意事項:?
    1,剝離類中易于變化的行為,通過組合的方式嵌入抽象基類?
    2,變化的行為抽象基類為,所有可變變化的父類?
    3,用戶類的最終實例,通過注入行為實例的方式,設定易變行為?
    防止了繼承行為方式,導致無關行為污染子類。完成了策略封裝和可替換性。


    原文點擊打開鏈接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458446.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458446.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c#的dllimport使用方法詳解

DllImport是System.Runtime.InteropServices命名空間下的一個屬性類,其功能是提供從非托管DLL(托管/非托管是微軟的.net framework中特有的概念,其中,非托管代碼也叫本地(native)代碼。與Java中的機制類似&…

each函數循環數據表示列舉,列舉循環的時候添加dom的方法

var dotBox $(#bannerNum);var item <li></li>;var itemSize $(#bannerBack p).length;var dotBoxWidth itemSize*24;$(#bannerBack p).each(function () { dotBox.append(<li></li>); dotBox.find(li).eq(0).addClass(current);});這里要根…

使用lxml代替beautifulsoup

深入使用過lxml的都會深深地喜歡上它,雖然BeautifulSoup很流行,但是深入了解lxml后,你就再也不會使用bs了 我覺得beautifulsoup不好用,速度也慢(雖然可以使用lxml作為解析器了).另外soup.find_all這種簡直就是手工時代的操作(很多人使用find find_all這幾個函數, 其實它們使用起…

QT調用dll且進入DLL src code調試

qt應用程序AA.exe調用qt寫的BB.DLL時&#xff0c;進入BB.DLL src code調試 1、debug生成AA.exe 2、將debug生成的AA.exe整包debug folder放到BB.dll的debug生成的文件夾中 3、設置BB.dll這個project&#xff1a;項目----運行-----Executable中選擇BB.dll的debug文件夾中的AA.ex…

php安裝編譯時 configure: error: Cannot find OpenSSL's evp.h

yum install error: protected multilib versions errorsudo yum downgrade openssl 降級sudo yum install openssl-devel 另外參考yum install -y ncurses-devel yum install openssl openssl-develyum install openssl openssl-devel --setoptprotected_multilibfalse ln -s …

laravel項目中css樣式表的背景圖片不顯示

剛學laravel&#xff0c;遇到了很多坑&#xff0c;感覺laravel是挺強大的。 建好后臺項目&#xff0c;奈何css樣式表的背景圖片不顯示 .mainhd {background: url(../images/sky/body_bg.png) repeat-x 0px 0px; } 按理上面的寫法沒錯&#xff0c;因為是從別的后臺搬過來的&…

KVC KVO

1、KVC&#xff0c;即是指 NSKeyValueCoding&#xff0c;一個非正式的Protocol&#xff0c;提供一種機制來間接訪問對象的屬性。而不是通過調用Setter、Getter方法訪問。KVO 就是基于 KVC 實現的關鍵技術之一。 Demo&#xff1a; interface myPerson : NSObject { …

VS2010中 C++創建DLL圖解

一、DLL的創建 創建項目: Win32->Win32項目&#xff0c;名稱&#xff1a;MyDLL 選擇DLL (D) ->完成. 1、新建頭文件testdll.htestdll.h代碼如下&#xff1a;#ifndef TestDll_H_#define TestDll_H_#ifdef MYLIBDLL#define MYLIBDLL extern "C" _declspec(dllimp…

js理解 call( ) | apply( ) | caller( ) | callee( )

被js的這幾個方法搞的this暈頭轉向&#xff0c;下定決心搞清楚&#xff1b;1、call( )和apply( ):兩者都可以將函數綁定到另外一個對象上去運行&#xff0c;只是參數的傳遞方式不同&#xff0c;兩者都可以使當前函數擁有另一個對象的屬性和方法&#xff0c;實現js下的繼承&…

上傳SVN丟失.a文件的問題

iOS項目上傳到svn中&#xff0c;.a文件丟失 用Cornerstone工具&#xff0c;解決這個問題 1.打開Cornerstone左上角&#xff0c;點Cornerstone->Preferences->Subversion 2.Global lgnores下面有一個Use default global ignores 默認這里方框中會打鉤&#xff08;這就是.a…

使用公用表表達式的遞歸查詢

微軟從SQL2005起引入了CTE(Common Table Expression)以強化T-SQL。公用表表達式 (CTE) 具有一個重要的長處&#xff0c;那就是可以引用其自身。從而創建遞歸 CTE。遞歸 CTE 是一個反復運行初始 CTE 以返回數據子集直到獲取完整結果集的公用表表達式。 當某個查詢引用遞歸 CTE 時…

C#委托實現C++ Dll中的回調函數

from:https://blog.csdn.net/ferrycooper/article/details/63261771很多的Dll都是C和C寫的&#xff0c;那么如果C#想要調用Dll中的函數怎么辦&#xff0c;尤其是Dll函數其中一個參數是函數指針的&#xff0c;即里面有回掉函數的用C#怎么實現&#xff1f; C中的回掉函數在C#中有…

安裝Birt方法

安裝BIRT 方法&#xff1a; 博客地址&#xff1a;http://www.mamicode.com/info-detail-850588.html 注意&#xff1a;在 Install new Software 中輸入地址&#xff1a;http://download.eclipse.org/birt/update-site/4.2-interim 看好了 出來的四項要全部選中 &#xff0c;然后…

iOS NSString和NSDate轉換

后臺返回的時間字符串不是標準的時間而是計算機時間的時候&#xff0c;我們需要將它們轉換為標準時間&#xff0c;再進行轉換。 //字符串轉為時間&#xff0c;時間格式自己定 NSString * time "1501776000"; //時間字符串 NSInteger num [time integerValue]; …

15個最好的HTML5前端響應式框架(2014)

文中的多個框架基于SASS創建&#xff0c;SCSS是一種比LESS更簡潔的樣式表編程語言&#xff0c;它能夠編繹成CSS&#xff0c;可復用CSS代碼&#xff0c;聲明變量&#xff0c;甚至是函數&#xff0c;類Ruby/Python的語法。參見&#xff1a; LESS vs SASS&#xff1f;選擇哪種CSS樣…

DLL導出類和導出函數

from:https://blog.csdn.net/goodluckmt/article/details/526912971、動態庫DLL中的類或者函數有時候要被其他的庫調用&#xff0c;因此需要被其他庫調用的類或者函數需要進行導出。 2、首先編寫需要導出的DLL&#xff0c;新建一個工程設置應用程序類型為DLL3、類的代碼如下 頭…

Nginx做web服務器linux內核參數優化

Nginx做web服務器linux內核參數優化Nginx提供web服務時Linux內核參數調整是必不可少的&#xff0c;其中在優化方面就需要我們格外的注意。在下面就是對Linux內核參數優化的詳細介紹&#xff0c;希望大家有所收獲。關于Linux內核參數的優化&#xff1a;net.ipv4.tcp_max_tw_buck…

iOS系統發布時間

發布日期 版本編號 更改2017年9月12日 iOS11 GM seed2017年6月19日 iOS10.3.32016年11月9日 iOS10.2 Beta2 發布iOS10.2測試版版2016年11月1日 iOS10.2 Beta1 發布iOS10.2測試版版2016年10月25日 iOS10.1 發布iOS10.1正式版2016年9月22日 iOS10.1 Beta 發布iOS10.1測試版2016年…

Tomacat服務器的安裝和配置

一&#xff0c; Tomcat服務器的下載地址(Apache Tomcat的官網): http://tomcat.apache.org/download-70.cgi 這里為了穩定性安裝的版本為7.0. 截止目前版本已經發行到了9.0. 二&#xff0c; 解壓下載的壓縮包之后直接進入傻瓜式的安裝。   下載文件的全名&#xff1a; apach…

函數指針與回調函數詳解

函數指針與回調函數詳解 1.什么是函數指針&#xff1f; 函數&#xff08;的&#xff09;指針就是指針。這個指針存放一個函數的地址&#xff0c;而函數的名稱就該函數的入口&#xff0c;即地址。這類似于數組名就是數組的首地址。我們可以通過反匯編直觀的查看到函數名和函數地…