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

设计模式 -- 原型模式

作者: 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