iOS开发常用的集中设计模式

来源:互联网 发布:枫叶知秋 编辑:程序博客网 时间:2024/05/21 07:46

    "设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。"  ----百度百科


    开篇点题 ------ 

    任何理论都需要实例来支撑, 相信也很少有人在码代码之前就要来把各种设计模式了解透彻.

    JAVA中为总所周知的设计模式有24种(也有说27种), 同样在iOS中适用且常用的设计模式有6种:

    1. 单例模式

    2. 委托模式 (代理模式)

    3. MVC模式

    4. 观察者模式 (KVO, Notification)

    5. 策略模式

    6. 工厂模式

上面这些设计模式最大的特点就是降低不同类之间的耦合度, 俗称"解耦合". 不同模块之间的代码互相独立, 分工明确, 不会因为相互调用而产生过多依赖.


1. 单例模式

    单例模式在项目中通常被用作管理类. 在整个项目中只需要创建一次, 使用时候调用即可.

    系统常见单例类有: UIApplication, NSNotificationCenter.

    有时候我们自己也需要自定义一个管理用的单例类.

    创建一个单例的常用方式:

+ (instancetype)shareUserInfoManager{    static XLUserInfoManager *manager = nil;        static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        manager = [[self alloc] init];    });    return manager;}
如上, 提供一个类方法创建类, 使用GCD保证这个类只会被创建一次.

    一个合格的单例类除了一个创建用的类方法外, 通常还需要重写系统的几个构造方法. 如果在MRC模式, 则还需要重写几个构造函数, 重写release, retain, retainCount, copy等和内存管理相关的方法, 以防止引用计数的增减. 不过因为单例类大家都会通过公共的类方法来调用, 实际开发中不写的场合也非常多.


2. 委托模式 (代理模式)

    当我们有这样一个需求: 一个页面的事件响应, 需要在另一个页面执行某些操作. 或者一个页面需要向另一个页面传值. 

    比如添加通讯录, 当我们通过编辑添加了一条通讯录信息, 通常会回到通讯录列表, 这时候需要这个列表进行刷新, 并显示刚添加的那条通讯录.

    代理的设置分委托和代理各三步:

委托方:1. 声明协议方法

              2. 声明代理属性

              3. 调用代理

代理方:1. 设置代理

               2. 添加协议

               3. 实现代理方法

    举个栗子:

@class BuyBook;@protocol BuyBookDelegate <NSObject>@optional- (void)buyBookComplete:(BuyBook *)buyBook;@end@interface BuyBook : UIView@property (nonatomic, weak) id<BuyBookDelegate> delegate;@end
这里声明了一个BuyBook类。在.h文件中声明了BuyBookDelegate协议,并定义了协议方法。

其中@optional是指该协议方法并非必须实现。

之后定义delegate属性,该属性的类型为id,即任何遵从协议的对象都可以设置为该代理。

@implementation BuyBook- (void)buyBook {    if ([self.delegate respondsToSelector:@selector(buyBookComplete:)]) {        [self.delegate buyBookComplete:self];    }}@end
当有程序调用到buyBook方法时候,就执行代理方法。

使用判断来保证代理被继承且对应方法已经被实现的时候才调用。

@interface ViewController () <BuyBookDelegate>@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        BuyBook * buyBook = [[BuyBook alloc] init];    buyBook.delegate = self;    }- (void)buyBookComplete:(BuyBook *)buyBook {        NSLog(@"buy book complete!");}
在使用这个类的时候,需要设置对象的delegate属性为self。

添加对应的协议名称。

实现需要的协议方法。


3. MVC模式

使用Model(模型),View(视图),Controller(控制器)将整个项目功能划分成三个不同的模块,使得项目分工明确,层次清晰,易于维护。

iOS在编程的时候,也经常使用MVC的思想来构筑代码,最明显的就是文件夹的划分。


.... (未完待续


0 0
原创粉丝点击