OC:生成器模式

2020-04-15  本文已影响0人  春暖花已开
MZUser
//.h
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@class MZUserBuilder ;
@interface MZUser : NSObject

@property(nonatomic, copy) NSString *userId;
@property(nonatomic, copy) NSString *firstName;
@property(nonatomic, copy) NSString *lastName;
@property(nonatomic, copy) NSString *gender;
@property(nonatomic, copy) NSDate *dateOfBirth;
@property(nonatomic, strong) NSArray *albums;

+ (instancetype)userWithBlock:(void (^)(MZUserBuilder *))block;
- (instancetype)initWithBuilder:(MZUserBuilder *)builder;

@end

NS_ASSUME_NONNULL_END


//.m
#import "MZUser.h"

#import "MZUserBuilder.h"

@implementation MZUser

- (instancetype)initWithBuilder:(MZUserBuilder *)builder {
    if(self = [super init]) {
        self.userId = builder.userId;
        self.firstName = builder.firstName;
        self.lastName = builder.lastName;
        self.gender = builder.gender;
        self.dateOfBirth = builder.dateOfBirth;
        self.albums = [NSArray arrayWithArray:builder.albums];
    }
    return self;
}

+ (instancetype)userWithBlock:(void (^)(MZUserBuilder *))block {
    MZUserBuilder *builder = [[MZUserBuilder alloc] init];
    block(builder);
    return [builder build];
}


@end
MZUserBuilder
//.h
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@class MZUser;
@interface MZUserBuilder : NSObject

@property(nonatomic, copy) NSString *userId;
@property(nonatomic, copy) NSString *firstName;
@property(nonatomic, copy) NSString *lastName;
@property(nonatomic, copy) NSString *gender;
@property(nonatomic, copy) NSDate *dateOfBirth;
@property(nonatomic, strong) NSArray *albums;

- (MZUser *)build;

@end

NS_ASSUME_NONNULL_END


//.m
#import "MZUserBuilder.h"
#import "MZUser.h"

@implementation MZUserBuilder

- (MZUser *)build {
    return [[MZUser alloc] initWithBuilder:self];
}

@end

使用
- (void)viewDidLoad {
    [super viewDidLoad];
    
//    MZUser *user = [MZUser userWithBlock:^(MZUserBuilder * _Nonnull builder) {
//        builder.userId = @"id001";
//        builder.firstName = @"Alice";
//        builder.lastName = @"Darji";
//        builder.gender = @"F";
//        NSCalendar *cal = [NSCalendar currentCalendar];
//        NSDateComponents *components = [[NSDateComponents alloc] init];
//        [components setYear:1980];
//        [components setMonth:1];
//        [components setDay:1];
//        builder.dateOfBirth = [cal dateFromComponents:components];
//        builder.albums = [NSArray array];
//    }];
    
    MZUserBuilder *builder = [[MZUserBuilder alloc] init];
    builder.userId = @"id001";
    builder.firstName = @"Alice";
    builder.lastName = @"Darji";
    builder.gender = @"F";
    NSCalendar *cal = [NSCalendar currentCalendar];
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setYear:1990];
    [components setMonth:9];
    [components setDay:24];
    builder.dateOfBirth = [cal dateFromComponents:components];
    builder.albums = [NSArray array];
    MZUser *user = [[MZUser alloc] initWithBuilder:builder];
    
    NSLog(@"%@--%@--%@--%@--%@--%@", user.userId, user.firstName, user.lastName, user.gender, user.dateOfBirth, user.albums);
}
上一篇下一篇

猜你喜欢

热点阅读