iOS设计模式——原型

何为原型模式?

原型模式是一种非常简单的设计模式。客户端知道抽象Prototype类。在运行时,抽象Prototype子类的任何对象都可以按客户端的意愿被复制。因此无需手工创建就可以制造同一类型的多个实例。说明它们之间静态关系的类图如下:

Prototype声明了复制自身的接口。作为Prototype的子类,ConcretePrototype实现了Concrete复制自身的clone操作。这里的客户端通过请求原型复制其自身,创建一个新的对象。

原型模式:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象。

何时使用原型模式?

@:需要创建的对象应独立于其类型与创建方式。

@:要实例化的类是在运行时决定的。

@:不想要与产品层次相对应的工厂层次。

@:不同类的实例间的差异仅是状态的若干组合。因此复制相应数量的原型比手工实例化更加方便。

@:类不容易创建,比如每个组件可把其他组件作为子节点的组合对象。复制已有的组合对象并对副本进行修改会更加容易。

此模式的最低限度是生成对象的真实副本,以用作同一环境下其他相关事物的基础。

浅复制与深复制

浅复制:只复制了指针,而没有复制实际资源。

深复制:不仅复制指针,还复制指针指向的资源。

在Cocoa Touch框架中的对象复制

Cocoa Touch框架为NSObject的派生类提供了实现深复制的协议。NSObject的子类需要实现NSCopying协议及其方法——(id)copyWithZone:(NSZone *)zone。NSObject有一个实例方法叫做(id)copy。默认的copy方法调用[self copyWithZone:nil]。对于采纳了NSCopying协议的子类,需要实现这个方法,否则将引发异常。iOS中,这个方法保持新的副本对象,将其返回。此方法的调用者要负责释放返回的对象。

多数情况下,深复制的实现看起来并不复杂。其思路是复制必需的成员变量与资源,传给此类的新实例,然后返回这个新实例,然后返回这个新实例。技巧在于保证确实复制了内存中的资源,而不只是指针值。

时间: 2024-10-11 12:05:53

iOS设计模式——原型的相关文章

iOS设计模式----原型模式

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.原型模式其实就是从一个对象再创建另一个可定制的对象,而且不需知道任何创建的细节. 比如说,有一个Student类,有firstName(姓).lastName(名).friends这三个属性 原型模式依赖于NSCopying协议,需要实现-copyWithZone方法 Student.h Student.m main.m

iOS设计模式 - 原型

原理图 说明 1. 原型模式为复制这个原型并创建新的对象 2. 不同类的实例间差异仅是状态的若干组合,因此,复制原型要比手工实例化更加方便 3. 类不容易创建,每个组件可把其他组件作为子节点的组合对象,复制已有的组合对象要比对副本修改更加容易 源码 https://github.com/YouXianMing/PrototypePattern // // BaseCopyObject.h // PrototypePattern // // Created by YouXianMing on 15

IOS设计模式之四(备忘录模式,命令模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 备忘录(Memento)模式 备忘录模式快照对象的内部状态并将其保存到外部.换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的. 如何使用备忘录模式 在ViewController.m中增加

IOS设计模式之二(门面模式,装饰器模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 门面(Facade)模式(译者注:facade有些书籍译为门面,有些书籍译为外观,此处译为门面) 门面模式针对复杂的子系统提供了单一的接口,不需要暴漏一些列的类和API给用户,你仅仅暴漏一个简单统一的API. 下面的图解释了这个概念: 这个API的使用者

IOS设计模式之三(适配器模式,观察者模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 适配器(Adapter)模式 适配器可以让一些接口不兼容的类一起工作.它包装一个对象然后暴漏一个标准的交互接口. 如果你熟悉适配器设计模式,苹果通过一个稍微不同的方式来实现它-苹果使用了协议的方式来实现.你可能已经熟悉UITableViewDelegat

IOS设计模式之一(MVC模式,单例模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么翻译错误,请与我联系谢谢. iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不会太关注它. 在软件设计领域,设计模式是对通用问题

iOS 设计模式

Ios 设计模式,你可能听说过,但是你真正知道这是什么意思么?大部分的开发者大概都同意设计模式很重要,但是关于这一部分却没有很多的文章去介绍它,我们开发者很多时候写代码的时候也并不重视设计模式. 设计模式是在软件设计上去解决普通问题的可重用的方法.他们是是帮助你让所写的代码更加容易理解和提高可重用性的模板.它们还可以帮你创建松散耦合的代码是你能不费很大功夫就可以改变或者替代你的代码中的一部分. 如果你对设计模式感到生疏,那么我有个好消息告诉你!首先,你已经用了很多ios设计模式多亏了Cocoa

iOS设计模式 - 概述

最近可自由安排的时间比较多, iOS应用方面, 没什么好点子, 就先放下, 不写了.花点时间学学设计模式. 之后将会写一系列博文, 记录设计模式学习过程. 当然, 因为我自己是搞iOS的, 所以之后设计代码部分, 将尽量与objective-c相结合. iOS设计模式 - 概述           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40372113 一.定义 设计模式(Des

iOS设计模式(代码分析系列2:简单工厂模式)

简单工厂模式示例代码下载地址, 1.简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模式).这里对简单工厂模式进行介绍,是为后面的工厂方法和抽象工厂模式做一个引子. 2.定义 "专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类." 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 3.结构图 简要分析结构图: ConcreteProduct