用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。

 
说直白点就是如果有一个对象很复杂, 重新创建要花费很多的代码或者代价
这个时候可以考虑使用原型模式, 当要创建新实例时通过既有的实例复制一份,再修改不一样的地方值
 
什么时候考虑使用原型模式呢?
#1 有很多相关的类, 其行为略有不同, 而且主要差异在于内部属性, 如名称/图像等.
#2 需要使用组合(树型)对象作为其他东西的基础, 例如, 使用组合对象作为组件来构建另一个组合对象.
 
下面用代码说明如何使用
 
先创建一个Protocol
 #import <Foundation/Foundation.h>

 @protocol PrototypeCopyProtocol <NSObject>

 @required

 /**
复制自己 @return 返回一个拷贝的对象
*/
- (id)clone; @end

创建对象模型

Student.h

 #import <Foundation/Foundation.h>
#import "PrototypeCopyProtocol.h" @interface Student : NSObject <PrototypeCopyProtocol> @property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *age;
@property (nonatomic, strong) NSString *score;
@property (nonatomic, strong) NSString *address; #pragma mark - PrototypeCopyProtocol method
- (id)clone; @end

Student.m

 #import "Student.h"

 @implementation Student

 - (id)clone {

     Student *stu = [[[self class] alloc] init];

     stu.name    = self.name;
stu.age = self.age;
stu.score = self.score;
stu.address = self.address; return stu;
} @end

下面是Controller中使用:

 - (void)viewDidLoad {
[super viewDidLoad]; //创建第一个学生实例
Student *stu1 = [[Student alloc] init]; stu1.name = @"Jackey";
stu1.age = @"";
stu1.score = @"";
stu1.score = @"重庆"; //创建第二个学生实例
Student *stu2 = [stu1 clone]; stu2.name = @"Franky"; }

Objective-C 原型模式 -- 简单介绍和使用的更多相关文章

  1. TCP同步与异步及阻塞模式,多线程+阻塞模式,非阻塞模式简单介绍

    首先我简单介绍一下同步TCP编程 与异步TCP编程. 在服务端我们通常用一个TcpListener来监听一个IP和端口.客户端来一个请求的连接,在服务端可以用同步的方式来接收,也可以用异步的方式去接收 ...

  2. MVC模式简单介绍

    模型-视图-控件(model-View-Controller)MVC结构是一种开发模块的方法,它将数据存储和数据处理从数据的可视化表示中分离出来.存储和处理数据的组件称为模型,它包括模块的实际内容.表 ...

  3. Objective-C 外观模式--简单介绍和使用

    外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用. 在以下情况下可以考虑使用外观模式: (1)设计初期阶段,应该有意识的将不同层分 ...

  4. java设计模式三种工厂模式简单介绍

    一.简单工厂模式 概述:简单工厂模式的创建意图就是,把对类的创建初始化全都交给一个工厂来执行,而用户不需要去关心创建的过程是什么样的,只用告诉工厂我想要什么就行了.而这种方法的缺点也很明显,违背了设计 ...

  5. android MVP模式简单介绍

    原文 http://zhengxiaopeng.com/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/ 前言 MVP作为一种MVC的演化版本在Android开发中受到 ...

  6. Android MVP模式简单介绍:以一个登陆流程为例

    老的项目用的MVC的模式,最近完成了全部重构成MVP模式的工作,虽然比较麻烦,好处是代码逻辑更加清楚.简洁,流程更加清晰,对于后续版本迭代维护都挺方便.对于一些想要学习MVP模式的同学来讲,百度搜出来 ...

  7. WIFI的AP/Sta模式简单介绍

    AP模式: Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下.AP和AP之间允许相互连接 Sta模式: Station, 类似于无线终 ...

  8. android:Activity四种启动模式简单介绍

    Activity启动模式 能够依据实际的需求为Activity设置相应的启动模式,从而能够避免创建大量反复的Activity等问题 Activity有四种载入模式 1.standard(默认启动模式, ...

  9. MVC的开发模式简单介绍

    MVCM model 模型 实体类和业务和dao dao(数据库访问对象)V view 视图 jspC controller 控制器 servlet 作用:视图和逻辑分离 开发设计顺序 1.设计数据库 ...

随机推荐

  1. 进击的Python【第四章】:Python的高级应用(一)

    Python的高级应用(一) 本章内容: 内置函数 生成器 迭代器 装饰器 JSON和PICKLE的简单用法 软件目录结构规范 一.内置函数 1.数学运算类 abs(x) 求绝对值1.参数可以是整型, ...

  2. SQL 语句与性能之联合查询和联合分类查询

    select * from t1 left join t2 on t2.sysno =t1.ASysNo left join t3 on t3.sysno =t2.ASysNo left join t ...

  3. 调整Kali Linux的锁屏时间

    调整Kali Linux的锁屏时间   锁屏是保护隐私的一种重要机制.当用户不操作电脑一段时间后,系统会进入锁屏状态.用户需要输入口令,才能重新进入系统.避免因为操作人员离开电脑后,被其他人员利用现有 ...

  4. 【HDU2222】Keywords Search AC自动机

    [HDU2222]Keywords Search Problem Description In the modern time, Search engine came into the life of ...

  5. Java 实现HTML富文本导出至word完美解决方案

    一. 问题的提出 最近用java开发一个科技项目信息管理系统,里面有一个根据项目申请书的模板填写项目申报信息的功能,有一个科技项目申请书word导出功能. 已有的实现方式:采用标准的jsp模板输出实现 ...

  6. js中创建对象的三种方式

    1. 对象字面量 var obj={ name:"小小", age:3, car:{ brand:"baoma", } }; } 2.使用内置构造函数 var ...

  7. Win32 OpenProcess打开进程失败,返回5无权限操作

    Win32 OpenProcess打开进程失败,返回5无权限操作,相信你会碰到这样的事,在IDE中可以,单独却不可以了,其实这时就需要提权了,否则是无法打开的,OpenProcess提权至Debug即 ...

  8. Web前端开发推荐阅读书籍

    前言 前端工程师在中国兴起也就5年左右,以前公司里没有专门前端工程师的这个职位,很多前端方面的任务都是由全栈工程师来完成,有的基础一点的后台或者设计的帮助分担一些.但是随着互联网的快速发展,特别是所谓 ...

  9. Android 网络状态检测

    package com.example.administrator.yunstore.net; import android.app.AlertDialog; import android.conte ...

  10. Daily Scrum02 12.13

    之前由于编译的第二次审查,大家又紧张地忙了一阵,调Bug的调Bug,换文法的换文法,双十二的会议也停了一次,给大家完成数据库大作业留一个缓冲的时间.但是我们的进度还要继续抓紧啊!! Member 任务 ...