设计模式概述
创建型模式-单例模式
创建型模式-原型模式
创建型模式-建造者模式
原型模式是一种创建型设计模式,使你能够复制已有对象,而又无需使代码依赖它们所属的类。
如果你有一个对象, 并希望生成与其完全相同的一个复制品,首先,你需要创建一个同类对象,然后遍历原始对象的所有成员变量, 并将成员变量值复制到新对象中。但有些对象可能拥有私有成员变量, 它们在对象本身以外是不可见的。其次,对于java及一些其他语言而已,有时候,对象的持有者,并不知道该对象所属的类,也不方便依赖该类,它只是知道对象所实现的接口,这个时候,你就需要原型模式。

@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@end
@implementation Person
- (id)copyWithZone:(NSZone *)zone {
Person *person = [[[self class] alloc] init]; // 没有调用[super copyWithZone:zone]
person.name = [self.name copy];
return person;
}
@end
@interface Student : Person
@property (nonatomic, assign) NSUInteger studentNumber;
@end
@implementation Student
- (id)copyWithZone:(NSZone *)zone {
Student *student = [super copyWithZone:zone]; // 调用[super copyWithZone:zone]
student.studentNumber = self.studentNumber;
return student;
}
@end
@interface School : NSObject
@end
@implementation PrototypeSubClass
- (void)copyAStudent {
Student *studentA = [Student alloc] init];
Student *studentB = [studentA copy];
studentB.studentNumber = studentA.studentNumber++;
}
@end
✅ 你可以克隆对象, 而无需与它们所属的具体类相耦合。
✅ 可以更方便地生成复杂对象。
✅ 可以克隆预生成原型, 避免反复运行初始化代码。
❌ 克隆包含循环引用的复杂对象可能会非常麻烦。
由谁创建(Who) :由原型对象创建
创建什么(What) :原型对象的拷贝
何时创建(When):客户端需要一个新的原型对象时
端侧开发,一般不需要做大数据量的处理工作,即使有相似的同个类对象批量出现的场景,譬如 UITableView(列表控件),也是使用复用而不是拷贝产生新对象,为什么?
参考资料