看了大話設(shè)計(jì)模式和編程之道钥飞,看的時(shí)候覺得清楚明了,但是寫的時(shí)候還是不會(huì)有意的去用衫嵌,所以做個(gè)大致的概要读宙,免得下次又忘了。
1.工廠方法&抽象工廠
這兩個(gè)總是搞混楔绞,而且比較常用结闸,所以先拿出來【贫洌看個(gè)示例:
NSNumber *floatNumber = [NSNumber numberWithFloat:1.0f];//[floatNmuber class] = NSCFNumber
NSNumber *boolNumber = [NSNumber numberWithBool:YES];//[boolNumber class] = NSCFBoolean
[floatNumber boolValue];
[boolNumber floatValue];
工廠方法:
通過傳入?yún)?shù)對(duì)應(yīng)初始化返回不同的子類桦锄。從上訴可以看出floatNumber和boolNumber所屬的類是不同的,也就是NSNumber只是個(gè)抽象基類蔫耽,用另一種說法就是類簇结耀,同樣NSArray也是通過這種方法實(shí)現(xiàn)的,所以判斷兩個(gè)array相等的時(shí)候慎用isKindOfClass匙铡。
抽象工廠:
抽象工廠指的是類簇中的所有之類都可以調(diào)用抽象基類的方法而不會(huì)報(bào)錯(cuò)图甜,也就是floatNumber可以調(diào)用boolValue,他們都繼承自NSNumber鳖眼,所以調(diào)用該方法并不會(huì)報(bào)錯(cuò)黑毅。
可能有點(diǎn)模糊不好理解,不過仔細(xì)思考下繼承體系和方法調(diào)用感覺還是能區(qū)別的钦讳。
2.生成器模式
我習(xí)慣稱作構(gòu)造器..因?yàn)锽uilder的緣故吧矿瘦。這個(gè)模式還是比較好理解的枕面,如果某個(gè)對(duì)象的屬性很多,可以通過一個(gè)生成器去實(shí)例化對(duì)象缚去。
@TeacherBuilder
Teacher *teacher;
- (TeacherBuilder *)buildTeacher
{
self.teacher = nil;
self.teacher = [[Teacher alloc] init];
return self;
}
- (TeacherBuilder *)buildSex:(NSString *)sex
{
self.teacher.sex = sex;
return self;
}
@end
@Teacher
+ (Teacher *)teacherWithTeacherBuilder:(TeacherBuilder *)teacherBuilder
{
return teacherBuilder.teacher;
}
@begin
TeacherBuilder *teacherBuilder = [[TeacherBuilder alloc] init];
[[[teacher buildNewTeacher] buildSex:women]
buildAge:23];
Teacher *teacher = [Teacher teacherWithTeacherBuilder:teacherBuilder];
@end
簡(jiǎn)單示范...有什么不對(duì)的直接指出就好膊畴。構(gòu)造器可以使用鏈?zhǔn)秸{(diào)用,看起來也比較舒服病游,當(dāng)然唇跨,也可以一次一次調(diào)用,看自己喜好衬衬÷虿可以創(chuàng)建一個(gè)通用實(shí)例構(gòu)造器,每次初始化這個(gè)對(duì)象的時(shí)候直接返回這個(gè)通用構(gòu)造器就可以了滋尉。
3.單例模式
這個(gè)模式用的太多了玉控,而且GCD的dispatch_once大大方便了單例的創(chuàng)建,就不說了狮惜。
4.適配器模式
iOS里面的delegate和block很好的支持了適配器模式高诺,和這兩個(gè)一聯(lián)系起來,就很容易想到適配器模式的由來碾篡,可以在外部賦值虱而,內(nèi)部進(jìn)行處理,我個(gè)人感覺就是回調(diào)了开泽,如果有誤區(qū)還望指出牡拇,比如你要設(shè)置一個(gè)按鈕,但是你不知道別人要給這個(gè)按鈕設(shè)置透明度穆律,這個(gè)時(shí)候就可以利用回調(diào)惠呼,根據(jù)他給出的值來設(shè)置,也就是根據(jù)不同的值進(jìn)行不同的適配峦耘。當(dāng)然block和delegate網(wǎng)上的案例很多剔蹋,這里就不給出來了。
5.外觀模式
用我的話來說就是簡(jiǎn)化接口辅髓,一個(gè)簡(jiǎn)單的接口下藏著一些復(fù)雜的操作泣崩,但是這些操作又是他人無需了解的,就可以隱藏起來利朵,比如坐火車:
- (void)trainToPlace:(NSString *)place;
{
[self buyCard]; //買車票
[self waitTrain]; //等火車
...
}
其實(shí)這個(gè)模式還是很好理解的律想。
剩下幾個(gè)模式一天天寫吧...有不對(duì)的地方還希望能指出一下,有不懂的也可以交流一下绍弟,共同進(jìn)步嘛技即。 ---轉(zhuǎn)載請(qǐng)注明原作者。