博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Builder Pattern 创建者模式的学习初探
阅读量:5163 次
发布时间:2019-06-13

本文共 2676 字,大约阅读时间需要 8 分钟。

  创建者模式的使用,主要目的是提高代码的可维护性,如果需要对需求进行修改,不用重新修改方法和接口,根据参数或条件的不同处理。也就是对象的创建方法与初始化方式分离

  对CountryBuilder对象的初始化,使用带属性参数的方法进行初始化,如果需求要更改,需要再次添加一个location的属性,那就需要修改此方法,操作比较简单;如果某一天需要添加10几20个方法,再次修改方法就比较麻烦,而且方法也比较长。

0 // Countrybuilder.h  1 #import 
2 3 @interface CountryBuilder : NSObject 4 5 // 属性 6 @property(nonatomic,strong)NSString *capital; 7 @property(nonatomic,strong)NSString *name; 8 @property(nonatomic,assign)double area; 9 @property(nonatomic,assign)NSInteger population;10 11 // 带属性参数的初始化方法12 - (instancetype)initWithName:(NSString *)name13 capital:(NSString *)capital14 area:(double)area15 population:(NSInteger)population;16 @end
// Countrybuilder.m#import "CountryBuilder.h"@implementation CountryBuilder#pragma mark - 带属性参数列表的初始化方法- (instancetype)initWithName:(NSString *)name                     capital:(NSString *)capital                        area:(double)area                  population:(NSInteger)population{    self = [super init];    if(self){        self.name = name;        self.capital = capital;        self.area = area;        self.population = population;    }    return self;}@end

  此时,我们可以使用创建者模式,将对象的创建方法与属性设置分离开。这有点类似于我们先创建对象再使用set方法设置属性。但不同的是,创建者模式更加紧凑:

0 // CountryBuilder.h  1 #import 
2 3 @interface CountryBuilder : NSObject 4 5 typedef void(^CountryBlock)(CountryBuilder* country); 6 7 // 属性 8 @property(nonatomic,strong)NSString *capital; 9 @property(nonatomic,strong)NSString *name;10 @property(nonatomic,assign)double area;11 @property(nonatomic,assign)NSInteger population;12 @property(nonatomic,strong)NSString *location;13 14 // 使用创建者的初始化方法15 + (instancetype)createWithBuilder:(CountryBlock)builder;16 17 @end
0 // CouontryBuilder.m  1 #import "CountryBuilder.h" 2  3 @implementation CountryBuilder 4  5 #pragma mark - 使用创建者模式初始化方法 6 + (instancetype)createWithBuilder:(CountryBlock)builder{ 7     CountryBuilder *country = [[CountryBuilder alloc] init]; 8     if(builder == nil){} 9     else{10         builder(country);11         // 如果某些属性不能为空,则可以在此声明12         NSAssert(country.name, @"Country name is required.");13     }14     return country;15 }16 17 @end

  在iOS 9中,创建消息弹框类UIAlertController中,对于对象的textField的设置也是使用了创建者方法进行构建:

1 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];2 [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {3     textField.backgroundColor = [UIColor yellowColor];4     textField.placeholder = @"Please input name";5 }];

 

转载于:https://www.cnblogs.com/kriskee/p/5332875.html

你可能感兴趣的文章
【更新】智能手机批量添加联系人
查看>>
NYOJ-128前缀式计算
查看>>
深入理解 JavaScript 事件循环(一)— event loop
查看>>
Hive(7)-基本查询语句
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
js编码
查看>>
Pycharm Error loading package list:Status: 403错误解决方法
查看>>
steps/train_sat.sh
查看>>
转:Linux设备树(Device Tree)机制
查看>>
iOS 组件化
查看>>
(转)Tomcat 8 安装和配置、优化
查看>>
(转)Linxu磁盘体系知识介绍及磁盘介绍
查看>>
tkinter布局
查看>>
命令ord
查看>>
Sharepoint 2013搜索服务配置总结(实战)
查看>>