美文网首页
设计模式 -- 原型模式

设计模式 -- 原型模式

作者: user_bo | 来源:发表于2019-02-26 14:14 被阅读0次

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

原型模式.png

client :客户端
protoType: 抽象原型协议
concretePrototype1: 具体原型类
concretePrototype2: 具体原型类

uml 解释

client -- protoType :关联关系
protoType--concretePrototype1 :泛化关系 / 实现关系
protoType -- concretePrototype2: 泛化关系 / 实现关系

相关文章

网友评论

      本文标题:设计模式 -- 原型模式

      本文链接:https://www.haomeiwen.com/subject/udeayqtx.html