iOS设计模式-原型模式

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


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

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

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

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

- (id)copyWithZone:(NSZone *)zone
#import <Foundation/Foundation.h>

@interface DDCommand : NSObject<NSCopying>

@property (copy, nonatomic) NSString *text;
@end
#import "DDCommand.h"

@implementation DDCommand

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

@end

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

DDCommand *command1 = [[DDCommand alloc]init];
command1.text = @"command1";
DDCommand *command2 = [command1 copy];
command2.text = @"command2";

demo1.zip

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 何为原型模式? 原型模式:例如客户端知道抽象Prototype类,在运行时,抽象Prototype子类的任何对象都...
    静谧的橘子阅读 713评论 0 2
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,210评论 30 471
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,688评论 1 180
  • 文/长木云伊 我的工作方向是工程仿真分析。讲出来好像很高深,其实很简单:一个零件,我用计算机建立模型,加上一些边界...
    莫嗔堂堂主阅读 572评论 0 0
  • 不必每天发文。写作是思考的结果,如没有不得不发的,就尽量不发,每天写就可以了。再见。突发奇想:设计一个闭环的空间,...
    伍帆阅读 209评论 0 0