本篇是关于iOS Design Pattern的介绍和用途.

攻略模板

  • 总结归纳各种Design Pattern特性
  • 总结Design Pattern用法和常见情景

学习后总结

Prototype Pattern

用clone的方式来创建重复对象,避免一直创建对象所带来的资源耗损。并且能够简化复杂对象的创建过程。
Prototype pattern refers to creating duplicate object while keeping performance in mind. This type of design pattern comes under creational pattern as this pattern provides one of the best ways to create an object.

例如发送广告信息给500万用户,如果一条一条发的话可能需要好几天时间,相当于获取一个个创建的model object中信息并输出。如果创建多线程同时发送,并且避免创建500W个object带来的资源耗损,可以使用一个通用的object,然后每次copy得到新的实例而不是使用构造函数得到新实例,再修改里面一部分variable并且不会影响原Object来实现。

这就要求: 首先Object class 继承 Cloneable接口.

注意: 这里的clone只能是shallow copy, 所以只能拷贝primitive type的值和对象、数组的reference,我们需要对 对象、数组进行deep copy.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Class Message implements Cloneable {
private String content;
private ArrayList<String> ars;
public Message(){
}
@Override
public Message clone() {
Message message = null;
try {
message = (Message)super.clone();
message.ars = (ArrayList<String>) this.ars.clone();
} catch(CloneNotSupportedException e) {
e.printStackTrace();
}
return message;
}
}

使用的时候则可以只创建一个新的object,之后不断clone来创建新的object.

1
2
3
4
5
6
7
Message message = new Message();
int i = 0;
while(i<10) {
Message cloneMes = message.clone();
....
sendMessage(cloneMes);
}

缺点:

  1. 在实现clone时可能需要实现复杂的代码,多重嵌套引用的deep copy很麻烦;
  2. 每一个类都需要配置clone方法,当对已有类进行改造是,需要修改源代码,违背“开闭原则”.