iOS设计模式 - 原型
原理图
说明
1. 原型模式指的是从一个已有的对象复制并创建出新的对象
2. 当一个类的实例之间存在差异,而这些差异仅是状态的若干组合,复制原型要比手工实例化更加方便
3. 当一个类并不容易创建(比如有着复杂的组合对象),且复制已有的组合对象要比对副本修改更加容易,此时,可以考虑使用原型模式
源码
https://github.com/YouXianMing/iOS-Design-Patterns
//
// BaseCopyObject.h
// PrototypePattern
//
// Created by YouXianMing on 15/7/29.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface BaseCopyObject : NSObject <NSCopying>
/**
* ==> 子类不要重写此方法 <==
*
* 复制操作
*
* @param zone
*
* @return 新复制的对象
*/
- (id)copyWithZone:(NSZone *)zone;
/**
* ==> 由子类重写 <==
*
* 参数赋值操作
*
* @param baseCopyObject 复制操作的对象
*/
- (void)parametersCopyOperationWithBaseCopyObject:(BaseCopyObject *)baseCopyObject;
@end
//
// BaseCopyObject.m
// PrototypePattern
//
// Created by YouXianMing on 15/7/29.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import "BaseCopyObject.h"
@implementation BaseCopyObject
- (id)copyWithZone:(NSZone *)zone {
BaseCopyObject *copy = [[self class] allocWithZone:zone];
[self parametersCopyOperationWithBaseCopyObject:copy];
return copy;
}
- (void)parametersCopyOperationWithBaseCopyObject:(BaseCopyObject *)baseCopyObject {
// 由子类重写
}
@end
分析
抽象基类遵循了复制协议并实现了基本复制功能
实例化的类通过继承抽象基类来继承复制功能
* 进行字典和数组的深层次拷贝
* 数组与字典已完成了深层次拷贝
数组中的对象(或者字典中的对象)在实现拷贝时,也是需要实现NSCopying协议的,也可以继承实现了NSCopying协议的基类