標籤:
iOS設計模式 - 原型
原理圖
說明
1. 原型模式為複製這個原型並建立新的對象
2. 不同類的執行個體間差異僅是狀態的若干組合,因此,複製原型要比手工執行個體化更加方便
3. 類不容易建立,每個組件可把其他組件作為子節點的組合對象,複製已有的組合對象要比對副本修改更加容易
源碼
https://github.com/YouXianMing/PrototypePattern
//// 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協議的基類
iOS設計模式 - 原型