iOS 设计模式之原型模式

2018-01-09  本文已影响0人  GlassHead
原型模式是指使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象。也就是提供一个快速复制对象的快捷方式。

当然这里的复制指的是深复制,复制的是对象。

简单写一个demo:

创建一个protocol

@protocol ProtocolType <NSObject>

- (id)clone;

@end

然后创建一个model遵循protocol,并实现protocol方法

@interface ProtocolModel : NSObject <NSCopying,ProtocolType>

@property (nonatomic, copy) NSString *name;

@property (nonatomic, assign) NSUInteger age;

@property (nonatomic, copy) NSString *hobby;

@end
- (nonnull id)copyWithZone:(nullable NSZone *)zone { 
    return [[self class] allocWithZone:zone];
}

- (id)clone {
    ProtocolModel *model = [[ProtocolModel alloc] init];
    model.name           = self.name;
    model.age            = self.age;
    model.hobby          = self.hobby;
    return model;
}

然后去VC里调用

    ProtocolModel *model = [[ProtocolModel alloc] init];
    model.name           = @"我叫多三胖";
    model.age            = 18;
    model.hobby          = @"学习";
    
    ProtocolModel *cloneModel = [model clone];
    NSLog(@"%@",cloneModel.name);
2018-01-09 13:55:23.657102+0800 iOS 原型模式[8348:887913] 我叫多三胖

当然也可以直接在ProtocolModel的- (nonnull id)copyWithZone:(nullable NSZone *)zone方法里直接复制。

- (nonnull id)copyWithZone:(nullable NSZone *)zone { 
    ProtocolModel *model = [[ProtocolModel alloc] init];
    model.name           = self.name;
    model.age            = self.age;
    model.hobby          = self.hobby;
    return model;
}

然后VC中复制对象用ProtocolModel *cloneModel = [model copy];就可以了(ProtocolModel需要遵循NSCopying协议)。

代码比较简单,就不上传demo了。

上一篇下一篇

猜你喜欢

热点阅读