您的位置:首页 > 移动开发 > IOS开发

IOS开发指南读书笔记5(IOS 常用设计模式)

2015-11-18 11:36 399 查看
IOS开发指南读书笔记5(IOS 常用设计模式)

1、单例模式

构造方法

@interface Singleton : NSObject

+(Singleton*)sharedInstance;

@property(nonatomic,strong) NSString* singletonData;

@end

@implementation Singleton

@synthesize singletonData = _singletonData;

static Singleton* sharedInstance = nil;

+(Singleton*)sharedInstance

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

sharedInstance = [[self alloc]init];

});

return sharedInstance;

}

@end

应用案例

UIApplication,UIAccelerometer,NSUserDefaults,NSNotificationCenter,NSFileManager,NSBundle

2、委托模式

构建方法

//委托协议

@protocol Delegate <NSObject>

//执行完毕

-(void)exeFinish;

@end

//通用类

@interface CustomClass : NSObject

//委托对象

@property(nonatomic,assign) id<Delegate>
delegate;

-(void)doSomething;

@end

@implementation CustomClass

@synthesize delegate = _delegate;

-(void)doSomething

{

//do something

NSLog(@"通知委托对象事情做完了");

if (self.delegate && [self.delegate respondsToSelector:@selector(exeFinish)])
{

[self.delegate exeFinish];

}

}

@end

//委托实现类

@interface DelegateImplements : NSObject <Delegate>

@end

@implementation DelegateImplements

-(void)exeFinish

{

NSLog(@"执行完毕");

}

@end

//创建对象

CustomClass* instance = [[CustomClass alloc]init];

DelegateImplements* delegate = [[DelegateImplements alloc]init];

instance.delegate = delegate;

应用案例

UITextFieldDelegate,UITableViewDelegate,UIActionSheetDelegate等。

3、观察者模式

//抽象观察者

@protocol Observer<NSObject>

@required

-(void)update;

@end

//抽象主题

@protocol Subject<NSObject>

-(void)addObserver:(id<Observer>)observer;

-(void)removeObserver:(id<Observer>)observer;

@end

//真正观察者

@interface TrueObserver : NSObject<Observer>

@end

@implementation TrueObserver

-(void)update

{

NSLog(@"刷新");

}

@end

//真正主题

@interface TrueSubject : NSObject<Subject>

{

//观察者数组

NSMutableArray* observers;

}

@property(nonatomic,strong) NSMutableArray*
observers;

+(TrueSubject*)sharedSubject;

@end

@implementation TrueSubject

@synthesize observers;

static TrueSubject* instance = nil;

+(TrueSubject*)sharedSubject

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

instance = [[self alloc]init];

instance.observers = [NSMutableArray array];

});

return instance;

}

-(void)addObserver:(id<Observer>)observer

{

[self.observers addObject:observers];

}

-(void)removeObserver:(id<Observer>)observer

{

[self.observers removeObject:observers];

}

//通知所有对象

-(void)notifyAllOberser

{

for (id observer in self.observers)
{

[observer update];

}

}

@end

实际案例NSNotificationCenter

KVO机制

//KVO主题

@interface KVOSubject : NSObject

//观察属性

@property(nonatomic,copy) NSString* observerProperty;

@end

//KVO观察者

@interface KVOObserver : NSObject

@end

@implementation KVOSubject

@synthesize observerProperty;

-(id)init

{

self = [super init];

if (self)
{

KVOObserver* observer = [[KVOObserver alloc]init];

[self addObserver:observer forKeyPath:@"observerProperty" options:NSKeyValueObservingOptionNew context:@"Pass
Context"];

self.observerProperty = @"呵呵";

self.observerProperty = @"嘻嘻";

self.observerProperty = @"hehe";

[self removeObserver:observer forKeyPath:@"observerProperty" context:@"Pass
Context"];

}

return self;

}

@end

@implementation KVOObserver

-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

NSLog(@"%@",change[@"new"]);

}

@end

4、MVC设计模式(略,参考之前的帖子)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: