原型模式: 使用原型实例创建对象的种类,并通过复制这个原型创建新的对象。
–最早定义于《设计模式》

上面是原型模式的的定义,在我看来原型模式就是复制模式,根据一个已有的实例复制出另外一个实例,被复制的那个实例就原型,所以才被叫做原型模式。

下面主要讲在iOS里面怎么实现原型模式。在iOS里面本身就自带了复制功能,有浅复制,也有深复制。浅复制是复制指针,而深复制是复制内容。所以我认为深复制才能真的算是原型模式。因为深复制完,两个实例是完全独立的个体,只是内容一样,这样才符合原型的定义。

现在我就直接上代码了,怎么实现深复制。

首先iOS协议里面有个NSCoping协议,想让创建的实例支持深复制,该实例的类需要实现这个协议,并实现该协议的copyWithZone方法

1
- (id)copyWithZone:(NSZone *)zone

1
2
3
4
5
6
#import <Foundation/Foundation.h>

@interface DDCommand : NSObject<NSCopying>

@property (copy, nonatomic) NSString *text;
@end
1
2
3
4
5
6
7
8
9
10
11
#import "DDCommand.h"

@implementation DDCommand

- (id)copyWithZone:(NSZone *)zone {
DDCommand *command = [[[self class]allocWithZone:zone]init];
command.text = _text;
return command;
}

@end

DDCommand类已经具有深复制的功能了,我们下面开始使用。

1
2
3
4
DDCommand *command1 = [[DDCommand alloc]init];
command1.text = @"command1";
DDCommand *command2 = [command1 copy];
command2.text = @"command2";

demo