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协议的基类

iOS设计模式 - 原型的更多相关文章

  1. IOS设计模式之一(MVC模式,单例模式)

    iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不 ...

  2. iOS书摘之Objective-C编程之道 iOS设计模式解析

    来自<Objective-C编程之道iOS设计模式解析>一书的摘要总结 一.Prototype 原型模式 定义:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象.(<设 ...

  3. iOS设计模式 - (1)概述

    近期可自由安排的时间比較多, iOS应用方面, 没什么好点子, 就先放下, 不写了.花点时间学学设计模式. 之后将会写一系列博文, 记录设计模式学习过程. 当然, 由于我自己是搞iOS的, 所以之后设 ...

  4. 10. 星际争霸之php设计模式--原型模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  5. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  6. iOS设计模式之生成器

    iOS设计模式之生成器 1.生成器模式的定义 (1): 将一个复杂的对象的构件与它的表示分离,使得相同的构建过程能够创建不同的表示 (2): 生成器模式除了客户之外还包括一个Director(指导者) ...

  7. IOS设计模式之三:MVC模式

    IOS设计模式之三:MVC模式   模型-视图-控制器 这个模式其实应该叫做MCV,用控制器把model与view隔开才对,也就是model与view互相不知道对方的存在,没有任何瓜葛,他们就像一个团 ...

  8. 【设计模式+原型理解】第一章:使用Javascript来巧妙实现经典的设计模式

    刚开始学习设计模式之前,我是没想说要学习设计模式的,我只是因为想学习JS中的原型prototype知识,一开始我想JS中为什么要存在原型这个东西?于是慢慢通过原型而接触到设计模式,后来发现我这个过程是 ...

  9. iOS设计模式 - 享元

    iOS设计模式 - 享元 原理图 说明 享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件:它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件.通常物件中的部分 ...

随机推荐

  1. 《LeetBook》leetcode题解(6): ZigZag Conversion[E]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  2. 如果天空不死博客java阅读列表整理

    如果天空不死的主页https://home.cnblogs.com/u/skywang12345 下面是最近总结的Java集合(JDK1.6.0_45)相关文章的目录. 01. Java 集合系列01 ...

  3. cmd sc命令进行服务操作

    sc 命令可以注册.删除和查询系统服务 sc可供选择的参数有很多,这里不详细描述.只介绍简单的最基本的sc使用方式. 1. sc create 创建windows服务 eg: sc \\myserve ...

  4. [PY3]——IO——pathlib

    pathlib.Path() from pathlib import Path p=Path("/test2") Path.cwd() print(p.cwd()) /py3 Pa ...

  5. 私有字段private也可以外部访问

    <?php//私有字段private也可以外部访问class nowamagic { private $domain; function __get($key){ return "使用 ...

  6. vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据

    在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-se ...

  7. 问题集录--jquery将json转excel保持

    代码如下: <html> <head> <meta http-equiv="content-type" content="text/html ...

  8. WPF: RenderTransform特效

    WPF中的变形(RenderTransform)类是为了达到直接去改变某个Silverlight对象的形状(比如缩放.旋转一个元素)的目的而设计的,RenderTransform包含的变形属性成员就是 ...

  9. linux运维工程师成长过程

    原文地址:https://blog.csdn.net/kwame211/article/details/78059331 初级篇 linux运维人员常用工具拓扑详见: 1rsync工具 很多地方经常会 ...

  10. synchronized同步锁

    在多线程的情况下,由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问.由于 ...