设计模式 - MVC
一 , 概念
MVC (Model-View-Controller)是模型-视图-控制器的简称,属于IOS项目开发中最常用的一种设计模式,在实际项目开发中,一般用MVC模式来搭建整个项目的框架。
二,详细介绍
1,模型Model
模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。用户在视图层所进行的创建或修改数据的操作,通过控制器对象传达出去,最终会创建或更新模型对象。模型对象更改时会通知控制器对象,控制器对象更新响应的视图对象
2,View(视图对象)
视图对象是应用程序中用户可以看见的对象,视图对象知道如何将自己绘制出来,并可能对用户的操作做出响应,视图对象的主要目的,就是实现来自应用程序模型对象的数据,并使该数据可被编辑。
3,Controller(控制器对象)
在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。
总结三点 1,Modle和View不能相互通信,只能通过Controller传递
2,Controller可以直接与Model对话(读写调用Model),model通过Nofifiaction和KVO机制与Controller间接通信
3,Controller是View的直接数据源(数据很可能是Controller从Model取得并经过加工了),Controller是View的代理,以同步View与Controller
设计模式 - 工厂方法
一,概念
工厂方法模式:定义创建对象的接口,让子类决定实例化那一个类。工厂方法使得一个类的实例化延迟到其子类。
二,使用场景
1、编译时无法准确语气要创建的对象的类;
2、类想让子类决定在运行时创建什么;
3、类有若干辅助类为其子类,热你想将返回的哪个子类这一信息局部;
三,在OC中的实现
1、定义通过工厂方法创建的类的统一的父类(例如:Animal)和通过工厂方法创建的各个类(例如:Dog、Cat等),并未各个子类提供初始化细节。
//通过工厂方法创建类的实现举例
- (id)initWithName:(NSString*)name{
if(self = [super init]){
self.name = name;
//添加初始化相关细节
...
}
return self;
}
2、定义生成器父类(例如:AnimalGenerator)和各个生成器子类(例如:DogGenerator、CarGenerator)
3、生成器父类中创建工厂方法、各个生成器子类中重载该方法
//AnimalGenerator中工厂方法
- (Animla*)animalWithName:(NSString*)name{
return [[Animal alloc] initWithName:name];
}
//DogGenerator对AnimalGenerator中工厂方法的重载
- (Animal*)animalWithName:(NSString*)name{
return [[Dog alloc] initWitName:name];
}
4、使用
DogGenerator *dogGenerator = [[DogGenerator alloc] init];
//不同生成器创建不同的动物
Animal *dog = [[dogGenerator animalWithName:@"小七"]];
设计方法 - 策略模式
一,概念
在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能
二,现实例子
1、一个菜单功能能够根据用户的“皮肤”选项来决定是采用水平的还是垂直的排列形式。同时可以灵活增加菜单那样的现实样式。
2、出行旅游:我们可以有几个策略可以考虑:可以骑自行车,汽车,火车,飞机。每个策略都可以得到相同的结果,但是他们使用了不同的资源。选择策略的依据是费用,时间,使用的工具,还有每种方式的方便程度。
三,解决方案
定义一系列的算法,把每一个算法封装起来,并且使他们可以互相替换。本模式使的算法可以独立于使用它的客户而变化。
策略模式把对象本身和运算规则区分开来,其功能非常强大。因为这个设计模式本身的核心思想就是面向对象编程的多形性的思想。
四、IOS中的应用
1、在验证用户输入的表单的时候,加入包括电话输入框的验证和邮件输入框的验证,这两部分的验证的算法是不同的,如果把这个算法看成一个函数,他几乎有相同的输入参数和返回参数,我们可以把这个相同的函数可以抽象为基类的一个方法,然后抽象出两个具体的策略类:电话验证类和邮件验证类,他们需要在各自的实现里面去复写父类的验证方法
2、排序算法,NSArray的sortedArrayUsingSelector
网友评论