iOS中的设计模式——原型(Prototype)

2017-12-02  本文已影响30人  UILabelkell

原型模式(Prototype):是指使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象。说人话:OC中可以通过深复制来快速而方便的创建一个新对象。

使用场景
1.需要创建的对象应独立于其类型与创建方式。也就是说我们想要的对象并不能够直接通过初始化函数来创建出来,其创建过程不具有普遍性且复杂。

2.要实例化类是在运行时决定的。在编写代码的时候并不知道哪种对象会被创建出来,其内部的结构如何复杂(例如:复杂程度取决于用户的操作)

3.不想要与产品层次相对应的工厂层次。不通过工厂方法或者抽象工厂来控制产品的创建过程,想要直接复制对象。

4.不同类的实例间的差异仅是状态的若干组合。因此复制相应数量的原型比手工实例化更加方便。

5.类不容易创建,比如每个组件可把其他组件作为子节点的组合对象。复制已有的组合对象并对副本进行修改会更加容易。内部结构复杂,不容易重现。

以下两种常见的使用场景:

1.有很多相关的类,其行为略有不同,而且主要差异在于内部属性,如名称、图像等;

2.需要使用组合(树形)对象作为其他东西的基础,例如,使用组合对象作为组件来构建另一个组合对象。

也就是说,通过初始化方法创建对象时特别繁琐(甚至无法实现),可以考虑使用原型模式深拷贝出一份模型副本。
<pre>
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) int age;
@end

@implementation Person

Person *p1 = [[Person alloc] init];
p1.name = @"name1";
p1.age = 29;

Person *p2 = [p1 copy];

NSLog(@"%@:%@, %d", p1, p1.name, p1.age);
NSLog(@"%@:%@, %d", p2, p2.name, p2.age);

</pre>

上一篇下一篇

猜你喜欢

热点阅读