• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Objective-C原型模式--简单介绍和使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

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

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

 

创建对象模型

Student.h

 1 #import <Foundation/Foundation.h>
 2 #import "PrototypeCopyProtocol.h"
 3 
 4 @interface Student : NSObject <PrototypeCopyProtocol>
 5 
 6 @property (nonatomic, strong) NSString *name;
 7 @property (nonatomic, strong) NSString *age;
 8 @property (nonatomic, strong) NSString *score;
 9 @property (nonatomic, strong) NSString *address;
10 
11 #pragma mark - PrototypeCopyProtocol method
12 - (id)clone;
13 
14 @end

 

Student.m

 1 #import "Student.h"
 2 
 3 @implementation Student
 4 
 5 - (id)clone {
 6     
 7     Student *stu = [[[self class] alloc] init];
 8     
 9     stu.name    = self.name;
10     stu.age     = self.age;
11     stu.score   = self.score;
12     stu.address = self.address;
13     
14     return stu;
15 }
16 
17 @end

 

下面是Controller中使用:

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3     
 4     //创建第一个学生实例
 5     Student *stu1 = [[Student alloc] init];
 6     
 7     stu1.name  = @"Jackey";
 8     stu1.age   = @"18";
 9     stu1.score = @"90";
10     stu1.score = @"重庆";
11     
12     //创建第二个学生实例
13     Student *stu2 = [stu1 clone];
14     
15     stu2.name = @"Franky";
16     
17 }

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
W3C 、HTML 、CSS 发展介绍发布时间:2022-07-14
下一篇:
linux下c语言 读取文件发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap