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

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. 用BETTERCAP和RASPBERRY PI ZERO W制作迷你WiFi干扰器

    我并不是一个特别勤快的人,几天前我终于开始将我几周以来的一些想法付诸于实践,即使用Raspberry Pi Zero W制作一个可随身携带的迷你WiFi干扰器.有了它,我就可以随时随地的收集附近无线接 ...

  2. eclipse安装pydev

    eclipse是常用的用来写java代码的IDE,但是其实也可以用来写python代码,只需要配置好pydev即可. 第一步 打开eclipse,点击Help,install new sofeware ...

  3. 【算法导论C++代码】Strassen算法

    简单方阵矩乘法 SQUARE-MATRIX-MULTIPLY(A,B) n = A.rows let C be a new n*n natrix to n to n cij = to n cij=ci ...

  4. Axure 简单原型设计

    简介 Axure RP是一个专业的快速原型设计工具.Axure(发音:Ack-sure),代表美国Axure公司:RP则是Rapid Prototyping(快速原型)的缩写. Axure RP是美国 ...

  5. log4j实现每一个线程保存一个日志文件

    log4j.properties: ### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.Conso ...

  6. 加加减减(你真的懂++--吗) C#

    目录  TOC \o "1-3" \h \z \u 自增量. PAGEREF _Toc456268662 \h 1 08D0C9EA79F9BACE118C8200AA004BA9 ...

  7. 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  8. 关于JSP乱码问题

    关于jsp乱码问题的解决. 1 最基本的乱码问题. 这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java&quo ...

  9. mysql,给每一条数据的某一个字段生成不同的随机数

    UPDATE t_article ta-- 利用LEFT JOIN的方式进行关联修改 LEFT JOIN(-- 先通过查询的方式给每一条数据生成对应的10-500之间随机数 SELECT articl ...

  10. Android版俄罗斯方块的实现

    学习Android的基本开发也有一段时间了,可是由于没有常常使用Android渐渐的也就忘记了. Android编程学的不深,不过为了对付逆向,可是有时还是会感到力不从心的.毕竟不是一个计算机专业毕业 ...