(译)Getting Started——1.3.2 Using Design Patterns(使用设计模式)

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

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学习的深入,你会发现越来越多可以在应用中使用的代理模式。

时间: 2025-01-02 01:33:46

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

【design patterns】设计模式

1.单例设计模式(singleton) 用途举例:对于多个程序使用同一个配置信息对象时比如在连接数据库时使用单例模式,每次只取出一个连接 步骤:①私有化该类的构造函数 ②私有化一个静态的对象 ③公有化一个静态方法,将创建的对象返回 懒汉式 模板: /** * 懒汉式:初始化的时候就会构造一个实例,消耗内存,但是不用考虑多线程的问题 * @author */ public class Singleton { private Singleton(){ } private static Singlet

设计模式(Design Patterns)

设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问

Design Patterns 5 原型模式 Prototype

原型模式 Prototype 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 当我们需要多个相同的类实例时,没必要每次都使用new运算符去创建相同的类实例对象,我们可以用原型模式减少内存的消耗和达到类实例的复用. //带有返回自身接口的抽象原型类 public abstract class Prototype5 { public string Id { get; set; } public Prototype5(string id) { this.Id = id;

Cocoa Design Patterns

Book Description This is the Rough Cut version of the printed book. Much of the technology embodied by Apple's Cocoa software development frameworks have been in commercial use since 1988, and in spite of many years of use, the Cocoa frameworks are s

Learning JavaScript Design Patterns The Observer Pattern

The Observer Pattern The Observer is a design pattern where an object (known as a subject) maintains a list of objects depending on it (observers), automatically notifying them of any changes to state. When a subject needs to notify observers about s

State Design Pattern 状态设计模式

设置好内部状态,然后根据不同的函数作为行为模式,进行状态转换. 有点像Finite Automata算法,两者的思想是一样的. 会Finite Automata,那么这个设计模式就很容易了. #pragma once #include <stdlib.h> #include <math.h> #include <random> #include <time.h> enum STATES { FULLY_RENTED, WAITING, GOT_APPLICA

[Design Patterns] 4. Creation Pattern

设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素:(1) Pattern Name, (2) Problem, (3) Solution, (4) Consequences. 01. Factory Method Pattern /* The product should be created by his own factory. */ Log

MapReduce Design Patterns

1. Design Patterns and MapReduce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Design PatternsMapReduce HistoryMapReduce and Hadoop RefresherHadoop Example: Word CountPig and Hive 2. Summarization Patter

Learning JavaScript Design Patterns The Module Pattern

The Module Pattern Modules Modules are an integral piece of any robust application's architecture and typically help in keeping the units of code for a project both cleanly separated and organized. In JavaScript, there are several options for impleme

Design Patterns 4 酒干倘卖无---抽象工厂模式AbstractFactory

抽象工厂模式AbstractFactory 抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类. 抽象工厂对于系列产品的变化支持 “开放——封闭”原则(指的是要求系统对扩展开放,对修改封闭),扩展起来非常简便,但对于添加新产品这种情况就不支持”开放——封闭 “原则. Design Patterns 4 酒干倘卖无---抽象工厂模式AbstractFactory,布布扣,bubuko.com