iOS设计模式-原型模式

定义:用原型实例指定创建对象的种类,在运行时抽象子类任何对象都可以按照客户端的意愿被复制。

注:通俗一点讲就是通过拷贝的方式快速复制该类一个对象

类型:对象创建

注:对象的拷贝分为浅拷贝和深拷贝,浅拷贝是指指针拷贝,或者对于有层级的对象拷贝时,有部分层级是浅拷贝(如数组,对数组是深拷贝,但对数组中的对象是浅拷贝,也属于浅拷贝的范畴),深拷贝不光拷贝指针还拷贝在内存中的指向的对象。

应用场景 

 

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCopyin,NSMutableCopying>
@property(nonatomic, copy)NSString *name;
@property(nonatomic, assign)NSInteger age;

- (id)copyWithZone:(NSZone *)zone;
- (id)mutableCopyWithZone:(NSZone *)zone;

- (void)copyProperty:(Person *)person;

@end
#import "Person.h"

@implementation Person

- (void)copyProperty:(Person *)person{
    person.name = _name;
    person.age = _age;
}

- (id)copyWithZone:(NSZone *)zone{
    Person *person = [[self class] allocWithZone:zone];
    [self copyProperty:person];
    return person;
}

- (id)mutableCopyWithZone:(NSZone *)zone{
    Person *person = [[self class] allocWithZone:zone];
    [self copyProperty:person];
    return person;
}
#import "Person.h"

@interface Programmer : Person
@property(nonatomic, copy)NSString *skill;
@end
#import "Programmer.h"

@implementation Programmer

- (void)copyProperty:(Programmer *)person{
    [super copyProperty:person];
     person.skill = _skill;
}

- (id)copyWithZone:(NSZone *)zone{
    Programmer *programmer = [[self class] allocWithZone:zone];
    [self copyProperty:programmer];
    return programmer;
}

- (id)mutableCopyWithZone:(NSZone *)zone{
    Programmer *programmer = [[self class] allocWithZone:zone];
    [self copyProperty:programmer];
    return programmer;
}
    测试
Programmer *programmer = [[Programmer alloc]init]; programmer.name = @"Hello world!"; Programmer *programmer1 = programmer; Programmer *programmer2 = [programmer copy]; programmer.name = @"hello iOS!"; NSLog(@"%@ == %@ == %@",programmer.name,programmer1.name,programmer2.name);
2016-08-08 17:45:35.446 DesignPatternsDemo[7148:779654] hello iOS! == hello iOS! == Hello world!

 

posted @ 2016-08-08 16:05  helloworld2019  阅读(172)  评论(0编辑  收藏  举报