设计模式解决了一个常见的软件工程学问题。模式不是编码,它是抽象的设计。它用于帮助开发者定义数据模型的结构和应用的交互。如果你采用了某种设计模式,你需要把它的一般形式适配到你特殊的需求上。不论你的应用是哪种形式,了解框架中使用的基本设置模式都是很有必要的。理解设置模式有助于你更有效的使用框架,还能帮助你写出重用性高、扩展性好、更容易变更的应用。

MVC

模型-视图-控制器(MVC)是IOS应用开发的核心设计模式。MVC把应用中的对象看为三种规则中任意一个:模型,视图,控制器。在这种模式下,模型跟踪应用的数据,视图显示用户的界面和构成应用的内容,控制器用于管理视图。通过响应用户的动作,通过使用数据模型中的数据来给视图填充内容,控制器被当成模型和视图之间的通道。

按照前面课程构建的ToDoList应用也遵循了MVC的设计模式。你在storyboard中创建的界面充当了视图层。AddToDoItemViewController和ToDoListTableViewControl这两个文件是用于管理视图的控制器。在后面的教程中,你将把一个数据模型合并到项目中,与视图和控制器一起工作。在开始进行应用设计之前,一定要以MVC的设计思想作为主导思想。

Target-Action

Target-Action是概念级别的简单设计模式,具体化后就是:当某个指定的事件发生时,某个对象把消息发送给另外一个对象。动作消息(action message)其实就是定义在源码中的选择器,目标(target)——接收消息的对象——也就是能够执行动作的对象,一般来说由视图控制器来充当。发送动作消息的对象一般被称为控件(control),例如button,slider,switch等,这些控件(control)都可以触发事件,用于响应用户的交互动作,例如按下,拖动等。

假设有这样一个案例:当用户按下应用中的Restore Defaults按钮时,你想存储默认的设置。首先,你得实现一个动作,用于执行存储默认设置的逻辑。然后,你需要注册按钮的Touch Up Inside事件来把存储默认设置的动作发送给实现了该方法的视图控制器。

在ToDoList应用中,我们已经使用了target-action模式。当用户在AddToDoItemViewController中按下保存按钮时,就触发了unwindToList动作。在这种情况下,保存按钮是发送消息的对象,目标对象是ToDoListTableViewController,动作消息是:unwindToList,接收消息的、被触发动作的事件是:用户按下保存按钮。target-action在应用各部分之间定义交互和发送消息,是一种功能强大的机制。

代理(Delegation)

代理是一种简单但是功能强大的语法,在应用中,它代表或配合另一对象的行为。代理对象中,持有另一对象的引用,并在适当的时期,代理对象给代理发送消息。消息通知事件的代理,该事件是代理对象即将处理或已经处理的事件。代理也可以响应自身界面(或状态)更新发出的消息,在某些情况下,它将返回一个值,该值会影响即将发生事件的处理。

代理模式普遍存在于现有的框架中,在应用的两个自定义对象之间,你也可以实现代理。使用代理的常用设计模式为:子视图控制器可以与父视图控制器就某个值(尤其是用户输入的值)进行通信。

到目前为止,你还用不到代理,但是在后面的教程中,当你给ToDoListTableViewController类添加额外的行为时,你会用到它。

上述的这些代理设计模式只是你在IOS开发中,会遇到的一小部分,当然,代理模式还有更多的应用。随着Objective-C学习的深入,你会发现越来越多可以在应用中使用的代理模式。

(译)Getting Started——1.3.2 Using Design Patterns(使用设计模式)的更多相关文章

  1. Streamline Your App with Design Patterns 用设计模式精简你的应用程序

    Back to Design Patterns Streamline Your App with Design Patterns 用设计模式精简你的应用程序 In Objective-C progra ...

  2. 【design patterns】设计模式

    1.单例设计模式(singleton) 用途举例:对于多个程序使用同一个配置信息对象时比如在连接数据库时使用单例模式,每次只取出一个连接 步骤:①私有化该类的构造函数 ②私有化一个静态的对象 ③公有化 ...

  3. Head First Design Patterns HeadFirst 设计模式

    OO原则是我们的目标,而设计模式是我们的做法. 策略模式 (Strategy) 在软件开发上,一直不变的真理是"change".不管软件设计的多好,一段时间之后,总是要成长与改变, ...

  4. Java设计模式(Design Patterns)——可复用面向对象软件的基础

    设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了可重用代码.让代码更容易被他 ...

  5. TypeScript Version 23 Design Patterns

    TypeScript Version 23 Design Patterns TypeScript 设计模式 https://refactoring.guru/design-patterns/types ...

  6. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  7. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  8. Head First Design Patterns

    From Head First Design Patterns. Design Principle: Idnetify the aspects of your application that var ...

  9. Apex Design Patterns

    Apex allows you to build just about any custom solution on the Force.com platform. But what are the ...

  10. [Design Patterns] 4. Creation Pattern

    设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素 ...

随机推荐

  1. mysql重置密码和mysql error 1044(42000)错误

    #mysql错误:(密码不正确,需要重置密码) ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...

  2. 取url中的参数值

    string url = "https://i.cnblogs.com/EditPosts.aspx?opt=1";//key不区分大小string key="opt&q ...

  3. 数据库建模软件ERStudio-表关系建模详解

    ERStudio是优秀的数据库建模软件,它不仅可以建立表.视图等模型,还可以建立多表间各种关系的模型,另外还可以根据模型生成表到数据库,下面具体讲解一下它的表关系建模. 1. 首先讲一下怎么建立表关系 ...

  4. [Python爬虫] 之十四:Selenium +phantomjs抓取媒介360数据

    具体代码如下: # coding=utf-8import osimport refrom selenium import webdriverimport selenium.webdriver.supp ...

  5. LeetCode OJ Minimum Depth of Binary Tree 递归求解

        题目URL:https://leetcode.com/problems/minimum-depth-of-binary-tree/ 111. Minimum Depth of Binary T ...

  6. PhoneGap录像 以及 录音功能 简单代码实现3

    1,录音功能 navigator.device.capture.captureAudio( function(files){//成功回调函数 Ext.getCmp("video_files_ ...

  7. selenium 问题:加了显性等待后,操作元素依然出错

    背景: 用WebDriverWait时,一开始用的是presence_of_element_located,我对它的想法就是他就是用来等待元素出现.结果屡屡出问题.元素默认是隐藏的,导致等待过早的就结 ...

  8. 解决oracle和plsql乱码问题

    oracle 10g装上后,建了个表写入中文数据,发现通过工具DbVisualizer 6.5 写入/读取中文都正常,就sqlplus和PL/SQL Developer不正常. 初步怀疑是DbVisu ...

  9. mac git xcrun error active developer path 错误

    一:情景: 在mac下使用git;xcode4.6的环境时,需要安装command line tools ,但是在装了xcode5之后,就不需要安装command line tools了,默认已经集成 ...

  10. GitHub页面布局乱了,怎么解决??

    GitHub页面布局乱了,怎么解决?? GitHub乱了,怎么解决?? 一年一度的布局又乱了!!! F12一下下面有东西加载不了,,,, Refused to evaluate a string as ...