1.原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
2.原型模式优势
原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节。
工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
3.应用情形
何时需要原型模式?
各个对象之间差异不大的时候(例如 所有属性相同,只是属性值不同),那么生成新对象的时候,只需要拷贝这个对象,然后做简单的修改,就能实现目的
4.具体案例
一个用户model,属性值基本相同,只是几个特别属性值不同
4.1 建立model
@interface Human : NSObject
@property (nonatomic,strong) NSString *name;
@property (nonatomic,assign) int age;
//省略相当多的属性 ,方法....
@end
4.1 建立根据原型创建的规则
@protocol PropertyCopyProtocol <NSObject>
/**
拷贝自己
@return 返回自己的一个拷贝样本
*/
- (id)clone;
@end
4.2 vc 客户端的调用比较
#import "Human.h"
// 创建一个对象, 设置属性值
Human * person_one = [Human new];
person_one.name = @"小王";
person_one.age = 18;
//创建第二个对象 :与第一个基本相同,只是名字发生变化
// 正常创建,属性一一赋值
Human * person_two = [Human new];
person_two.name = @"小红";
person_two.age = 18;
NSLog(@"正常创建 :person_one: %@,person_two: %@",person_one,person_two);
// 原型创建,属性赋值,相同字段 不需要重复赋值
Human * person_three = [person_one clone];
person_three.name = @"小牛";
NSLog(@"原型创建 :person_one: %@,person_three: %@",person_one,person_three);
5.原型模式 UML
原型模式.pngclient :客户端
protoType: 抽象原型协议
concretePrototype1: 具体原型类
concretePrototype2: 具体原型类
uml 解释
client -- protoType :关联关系
protoType--concretePrototype1 :泛化关系 / 实现关系
protoType -- concretePrototype2: 泛化关系 / 实现关系
网友评论