设计模式应用之概述

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

 

1.MVC模式

这种模式是面向对象的常用设计模式,优势是可以增强代码的可移植性,把耦合度降低。它是最常使用,很容易理解但又不容易实践的一种模式。事实上,要达到完全的MVC模式需要长时间的编程实践。

M(model): 程序中所有数据的管理成为模型层,它的职责包括,数据获取、整理、本地缓存、修改等。

V(view): 程序中所有的view都成为视图层,负责界面的展示和接收用户事件。

C(controller): 控制器是负责M和V中间层,负责控制M和V之间的通讯(事实上,不通过控制器,也可以使用KVO、Notification等方式也可以在低耦合的情况下对M和V之间通讯)

例:现在要展示开发一个地图展示页面,控制层需要先把地图视图创建出来,再调用模型视图获取地图数据(可能在本地,可能网络获取这个都在模型层控制),最后调用视图界面把模型层获取的数据展示到地图上。当用户对地图上的某一个poi点进行修改时,需要控制层调用模型层进行相应地修改。

 

2.单例模式

此模式简单地理解,就是在同一项目中保证某一个类只出现一个对象,一般在以下情况下使用:

第一、控制资源的使用,通过线程同步来控制资源的并发访问;

第二、控制实例产生的数量,达到节约资源的目的。

第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。

一般配置信息类(NSUserDefults)、管理类(NSFileManager)、控制类(AVAudioSession)、门面类、代理类通常被设计为单例类。

1 + (instancetype)sharedInstance{ 
2     static dispatch_once_t once; 
3     static id __singleton__; 
4     dispatch_once( &once, ^{ __singleton__ = [[self alloc] init];}); 
5     return __singleton__; 
6 }

 

3.Facade模式(门面,外观)

这种模式体现了面向对象的特性之一封装,意为把用户需要的接口暴露到外面,把用户不需要看到的操作过程隐藏起来,使用扩展添加私有类,尽量不要让用户访问。

 

4.装饰器(decorator)模式

在不改变原有类源码和原有类和其他类的引用关系的基础上给类添加一些方法或属性,这种方式正好与category的思想不谋而合,所以一般装饰器都使用category实现(在category实现添加属性的方法时在@interface下添加@property,在@implmentation下重写seter、getter方法,方法中实现使用<objc/runtime>中的方法实现),或代理可以实现。

 

5.适配器(Adapter)模式

适配器模式意在适配类与类之间的兼容性,一般有继承、类组合等方式实现,在不改变用户调用接口的情况下使用多种实现方式。

 

6.观察者(observer)模式

在观察者模式中,一个对象任何状态的变更都会通知另外的对改变感兴趣的对象。这些对象之间不需要知道彼此的存在,这其实是一种松耦合的设计。当某个属性变化的时候,我们通常使用这个模式去通知其他对象。

如果你要遵从MVC模式的概念,你需要让模型对象和视图对象在不相互直接引用的情况下通信。

这正是观察者模式的用武之地。Cocoa通过通知(Notifications)和Key-Value Observing(KVO)来实现观察者模式。

 

7.备忘录(Memento)模式

备忘录模式快照对象的内部状态并将其保存到外部。换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的。

 

8.命令模式

命令模式将一个请求封装为一个对象。封装以后的请求会比原生的请求更加灵活,因为这些封装后的请求可以在多个对象之间传递,存储以便以后使用,还可以动态的修改,或者放进一个队列中。苹果通过Target-Action机制和Invocation实现命令模式。

 

9. 工厂模式

在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。

工厂方法要解决的问题是对象的创建时机,它提供了一种扩展的策略,很好地符合了开放封闭原则。工厂方法也叫做虚构造器(Virtual Constructor)。 

 

10.抽象工厂

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

posted on 2014-03-17 10:25  仅此而已_  阅读(231)  评论(0编辑  收藏  举报

导航