常用设计模式 原型模式(prototype)

bancheng发布

前言

原型设计模式在objective-c中用的非常常见,以至于很多人用上了这个设计模式的时候都没有察觉。他的宗旨是
:一当前的对象为原型,创建出一个与该对象内容一模一样的对象出来。
5524F783E6D12E796161F61458237766.jpg

### 介绍

意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

主要解决:在运行期建立和删除原型。

何时使用:
1、当一个系统应该独立于它的产品创建,构成和表示时。
2、当要实例化的类是在运行时刻指定时,例如,通过动态装载。
3、为了避免创建一个与产品类层次平行的工厂类层次时。
4、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

如何解决:利用已有的一个原型对象,快速地生成和原型对象一样的实例。

关键代码: 1、实现克隆操作,objective-c中每一个实现 NSCopying 和 NSMutableCopying 协议方法来实现对象的浅拷贝或通过序列化的方式来实现深拷贝。
2、原型模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些”易变类”拥有稳定的接口。

应用实例:objective-c中每一个实现 NSCopying 和 NSMutableCopying 协议的类

优点: 1、性能提高。 2、逃避构造函数的约束。

缺点:
1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。
2、必须实现 NSCopying或者NSMutableCopying协议。
示例:小刘买了一辆benz小轿车, 小红瞧见了感觉挺不错的。于是也去买了一辆一模一样的车子

#import <Foundation/Foundation.h>
@interface BenzCar : NSObject<NSCopying>

@property(nonatomic,copy) NSString * name;
@property(nonatomic,copy) NSString * color;
@end

@implementation BenzCar

- (instancetype)copyWithZone:(NSZone *)zone
{
    BenzCar * car = [BenzCar allocWithZone:zone];
    car.name = [self.name copy];
    car.color = [self.color copy];
    return  car;
}

- (NSString *)description
{
    NSString * s = [NSString stringWithFormat:@"my name is  %@  color %@",self.name,self.color];

    NSLog(@"%@",s);
    return s;
}

//使用
void prototype()
{
    BenzCar * car = [[BenzCar alloc] init];
    car.name = @"爱车";
    car.color = @"yellow";

    BenzCar * newCar = [car copy];
    newCar.name = @"小红";

    [car description];
    [newCar description];

}

demo地址


bancheng

iOS开发者一枚,现就职中国北京。在这里记录自己开发遇到的问题和学习记录的笔记。喜欢学习、摄影。

发表评论

电子邮件地址不会被公开。 必填项已用*标注