iOS常用设计模式:MVC、单例、代理、观察者。

时间:2022-12-05 19:33:32

MVC

模型-视图-控制器(MVC)设计模式

MVC根据角色划分类,涉及到三个角色:

Model:模型保存应用程序的数据。

View:视图是模型的可视化表示以及用户交互的控件。

Controller:控制器是一个协调所有工作的中介者。它访问模型中的数据并在视图中展示它们,同时它们还监听事件和操作数据。


单例设计模式

单例设计模式可以确保对于一个类只有一个实例(对象)存在,这个对象有一个全局的访问点。通常采用懒加载的方式在第一次用到对象的时候才去创建它。

如何创建一个单例:

如:在SortDetailsModelDown.h中声明类方法+(SortDetailsModelDown *)shareSortDetailsModelDown;

在SortDetailsModelDown.m中实现该方法

static SortDetailsModelDown * single = nil;

+(SortDetailsModelDown *)shareSortDetailsModelDown{

@synchronized(self){

if (!single) {

single = [[SortDetailsModelDown alloc]init];

}

}

return single;

}


代理

自定义协议:

代理:遵循协议的对象

第一步:制定协议:(协议名:类名+Delegate)

@class MyView;
@protocol MyViewDelegate <NSObject>
@required //必须实现的方法
-(void)changeViewBackgroudColor:(MyView *)view;
@optional//可选方法
-(void)test;
@end

第二步:制定代理

@interface MyView : UIView
第二步:指定代理
@property (nonatomic,assign)id<MyView> delegate;
@end

第三步:代理遵循协议.

第四步:代理实现协议里面的必须实现的方法和其他可选方法.

第五步:委托方通知代理开始执行方法.


观察者

KVO  Key-Value Observing.它是一种机制,当指定的对象的属性被修改后,KVO自动通知相应的观察者。

  1. 注册观察者[message addObserver:self forKeyPath:kKVOPathKey options:NSKeyValueObservingOptionNew context:Nil];
  2. 更改主题对象属性的值,即触发发送更改的通知 _message.key = @"asdfasd";
  3. 在制定的回调函数中,处理收到的更改通知
    1
    2
    3
    4
    5
    6
    - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
     if ([keyPath isEqual:kKVOPathKey] &amp;&amp; object == _message) {
         NSLog(@"get %@",change);
     }
    }
  4. 注销观察者 [_message removeObserver:self forKeyPath:kKVOPathKey];