iOS设计模式之原型模式

48 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情


设计模式相信大家都很熟悉了,但是越是基础的东西也越是需要经常的回顾与思考,于是着手写一个温故而知新的设计模式回顾系列。
在 8 月,准备把各个常用的不常用的设计模式都进行一次回顾,并大概聊一下各个模式的特点与在 iOS 中的大概使用场景与情况。

这里是设计模式回顾的第十三篇,原型模式的相关回顾。

原型模式

1、什么是原型模式

原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的. 原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据.

原型模式实际意义上来说是拷贝、而且一般情况下都是深拷贝。在 iOS 中有相对应的方法 [obj copy] 实现拷贝。

2、原型模式用在什么地方

  • 需要复制一个原先的对象
    原型模式就是为了复制,所以说他的场合只有这么一个,一般来说,这个对象的创建比较复杂或者说比较耗时的时候,会考虑使用复制。

3、原型模式的使用

  1. 引用协议
  2. 实现 - (id)copyWithZone:(NSZone *)zone 方法
  3. 将所有的属性复制到出来

因为 iOS 自己拥有 copy 协议 ,所以你只需要考虑复制的内容就好,至于怎么生成的就交给程序自己了。

4、总结

由于 iOS 系统本身帮我们实现了许多的内容,导致我们使用原型模式十分方便,也是属于基础的模式之一。

5、demo

SingleView.h

#import <Foundation/Foundation.h>

@interface SingleView : NSObject <NSCopying>

/// 某个属性
@property (nonatomic, strong) NSString *name;
@end

SingleView.m

#import "SingleView.h"

@implementation SingleView 

- (id)copyWithZone:(NSZone *)zone {
    SingleView *single = [[SingleView allocWithZone:zone] init];
    single.name = _name;
    return single;
}
@end