一 工厂方法
工厂方法方便我们快速创建类的实例的方法。通过工厂方法,可以让调用过程更加清晰。
Person.h
1 #import <Foundation/Foundation.h>
2 3@interface Person : NSObject
4{
5int _age;
6 NSString * _name;
7}
8 9 - (int)age;
10 - (NSString *) name;
1112 + (NSString *) personWithAge:(int)age andName:(NSString *) name;
13 - (id) initWithAge:(int)age andName:(NSString*)name;
1415 @end
Person.m
1 #import "Person.h" 2 3@implementation Person
4 5 - (int)age{
6return _age;
7}
8 9 - (NSString *) name{
10return _name;
11}
121314 + (NSString *)personWithAge:(int)age andName:(NSString *)name{
15return [[Person alloc ]initWithAge:age andName:name ];
16};
1718 - (id)initWithAge:(int)age andName:(NSString *)name{
19 self = [super init];
20if(self != nil){
21 _age = age;
22 _name = name;
23 }
24return self;
25}
2627 - (NSString *)description{
28return [NSString stringWithFormat: @"人的年龄是%d,名字是%@", self.age, self.name ];
29 }
main.h
1 #import <Foundation/Foundation.h>
2 #import "Person.h" 3 4 5int main(int argc, constchar * argv[]) {
6 7 Person *p1 = [Person personWithAge:20 andName: @"lisi"];
8 NSLog(@"%@" , p1);
910return0;
11 }
二 代理设计模式
设计原理
有些麻烦的事情不想自己亲自做,就可以找个人帮忙,即交给代理对象去做。
设计原则
首先的拥有某个代理对象属性。其次要很清楚代理有哪些方法。最后要保证能解耦。
实现方案
定义一个protocol,在其中声明一些和代理沟通的方法。
拥有一个代理属性 id<protocol> delegate
让代理遵守protocol.
实例: 保姆与小孩
1.当A对象想监听B对象的一些变化时, 可以使用代理设计模式 保姆想监听婴儿的变化, 那么保姆就可以成为婴儿的代理, 当婴儿发生变化之后保姆就可以监听到.
2.当B对象发生一些事情, 想通知A对象的时候, 可以使用代理设计模式 婴儿想通知保姆, 那么就可以 让保姆成为婴儿的代理, 只要保姆成为婴儿的代理, 以后婴儿发生变化就可以通知保姆.
3.当对象A无法处理某些行为的时候,想让对象B帮忙处理(让对象B成为对象A的代理对象) 婴儿无法自己吃东西, 也无法自己入睡, 所以可以让保姆帮忙处理. 只要让保姆成为婴儿的代理就可以帮婴儿喂它吃东西和哄他睡觉.
三 delegate模式
IPeople.h
1 #import <Foundation/Foundation.h>
2 3 @protocol IPeople <NSObject>
4 5 - (int) age;
6 7 - (void)setAge:(int)age;
8 9 - (NSString*)name;
1011 @end
ManDelegate.h
1 #import <Foundation/Foundation.h>
23 @protocol ManDelegate <NSObject>
45 - (void) onAgeChanged:(int) age;
67 @end
Man.h
1 #import <Foundation/Foundation.h>
2 #import "IPeople.h" 3 #import "ManDelegate.h" 4 5 @interface Man : NSObject<IPeople>
6{
7int _age;
8}
910 - (id) init;
1112 - (int) age;
1314 - (void) setAge:(int)age;
1516 - (NSString *)name;
1718 @property id<ManDelegate> delegate;
1920 @end
Man.m
1 #import "Man.h" 2 3@implementation Man
4 5 - (id)init{
6 self = [super init];
7if( self ){
8 self.delegate=nil;
9 _age = 20;
10 }
1112return self;
13}
1415 - (int) age{
16return _age ;
17}
1819 - (void)setAge:(int)age{
20if (age != _age) {
21if(self.delegate){
22 [self.delegate onAgeChanged:age];
23 }
24 }
2526 _age = age;
27}
2829 - (NSString *)name{
30return@"lisi";
31}
3233 @end
Main.m
1 #import <Foundation/Foundation.h>
2 #import "Man.h" 3 #import "ManDelegate.h" 4 5 @interface MainListener : NSObject<ManDelegate>
6 - (void) onAgeChanged:(int) age;
7@end
8 9@implementation MainListener
1011 - (void)onAgeChanged:(int)age{
12 NSLog(@"Age changed, Current age is %d" , age);
13}
1415@end
1617int main(int argc, constchar * argv[]) {
18 Man *man = [[Man alloc]init];
19// man.delegate = [[MainListener alloc]init];20 [man setDelegate: [[MainListener alloc]init] ];
2122//[man setAge:20];23 [man setAge:21];
2425return0;
26 }
参考资料:
http://www.cnblogs.com/king129/p/4943875.html
原文:http://www.cnblogs.com/wangshuo1/p/iOS-100.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!