iOS 常用设计模式汇总

作者: Swift社区 | 来源:发表于2017-09-27 11:06 被阅读183次

在软件开发中,无论是那种高级语言中总会伴随着一些最为常用的设计模式,下面针对iOS中,MVC模式、代理模式、观察者模式、单例模式、策略模式、简单工厂模式这六大模式进行汇总分析。

一、MVC模式

MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑

1.1实例

MVC(Model View Controller)模型(model)-视图(view)-控制器(controller)

1.1.1模型对象

模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。例如,模型对象可能是表示游戏中的角色或地址簿中的联系人。用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达出去,最终会创建或更新模型对象。模型对象更改时(例如通过网络连接接收到新数据),它通知控制器对象,控制器对象更新相应的视图对象。

1.1.2视图对象

视图对象是应用程序中用户可以看见的对象。视图对象知道如何将自己绘制出来,并可能对用户的操作作出响应。视图对象的主要目的,就是显示来自应用程序模型对象的数据,并使该数据可被编辑。尽管如此,在 MVC 应用程序中,视图对象通常与模型对象分离。
在iOS应用程序开发中,所有的控件、窗口等都继承自 UIView,对应MVC中的V。UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewController实现。

1.1.3控制器对象

在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。控制器对象因此是同步管道程序,通过它,视图对象了解模型对象的更改,反之亦然。控制器对象还可以为应用程序执行设置和协调任务,并管理其他对象的生命周期。

model_view_controller.png

1.2应用场景

MVC模式是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。

1.3优势

MVC模式使系统,层次清晰,职责分明,易于维护

1.4敏捷原则

MVC模式对扩展开放-对修改封闭

二、代理模式

代理模式完成委托方交给的任务,委托方有一些任务自己不想完成,但是还需要要实现,则将该任务存放到协议中,由代理完成.但是代理并不会主动的执行任务,需要委托方通知代理。

2.1应用场景

当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。

2.2优势

解耦合

2.3敏捷原则

开放-封闭原则

2.4实例

tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。列表row个数delegate,自定义的delegate。

三、观察者模式

观察者模式本质上是一种发布-订阅模型,用以消除具有不同行为的对象之间的耦合,通过这一模式,不同对象可以协同工作,同时它们也可以被复用于其他地方Observer从Subject订阅通知,ConcreteObserver实现重现ObServer并将其重载其update方法。

3.1应用场景

一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。

3.2优势

解耦合

3.3敏捷原则

接口隔离原则,开放-封闭原则

3.4实例

Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。
kvo,键值对改变通知的观察者,平时基本没用过。

四、单例模式

单例模式可以保证App在程序运行中,一个类只有唯一个实例,从而做到节约内存。
在整个App程序中,这一份资源是共享的。
提供一个固定的实例创建方法。

4.1应用场景

确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

4.2优势

使用简单,延时求值,易于跨模块

4.3敏捷原则

单一职责原则

4.4实例

[UIApplication sharedApplication]。

4.5注意事项

确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。
java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。
object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,
返回的也只是此单例类的唯一静态变量。

五、策略模式

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

5.1应用场景

定义算法族,封装起来,使他们之间可以相互替换。

5.2优势

使算法的变化独立于使用算法的用户

5.3敏捷原则

接口隔离原则;
多用组合,少用继承;
针对接口编程,而非实现。

5.4实例

排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,会飞案例。

5.5注意事项

1、剥离类中易于变化的行为,通过组合的方式嵌入抽象基类
2、变化的行为抽象基类为,所有可变变化的父类
3、用户类的最终实例,通过注入行为实例的方式,设定易变行为
防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。

六、简单工厂模式

简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作。工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传给外界,而对象的创建是由外界决定的。外界只需要知道抽象子类对应的参数即可,而不需要知道抽象子类的创建过程,在外界使用时甚至不用引入抽象子类。

6.1应用场景

工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。

6.2优势

易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。

6.3敏捷原则

DIP依赖倒置原则

6.4实例

项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换

6.5注意事项

项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,增加了代码的复杂度,增加了调用层次,增加了内存负担。

相关文章

  • iOS 常用设计模式汇总

    在软件开发中,无论是那种高级语言中总会伴随着一些最为常用的设计模式,下面针对iOS中,MVC模式、代理模式、观察者...

  • 常用设计模式整理

    ios面试题(整理) ios常用的设计模式有哪些? MVC模式、委托模式、观察者模式(kvo、kvc、通知机制)、...

  • 单例的2种写法

    单例模式是iOS开发中最常用的设计模式,iOS的单例模式有两种官方写法,如下: 1,常用写法 import "Se...

  • 9.设计模式

    1.说一下你熟悉的设计模式? 感谢常用的设计模式汇总,超详细![https://mp.weixin.qq.com/...

  • MY_iOS常用设计模式总结

    iOS常用设计模式总结(一) 设计模式大概分成三类:1.创建型:单例设计模式、抽象工厂设计模式2.结构型:MVC ...

  • 常用设计模式汇总

    最近,我在看Head First设计模式。这本书写的非常棒,读的过程中总有“原来代码还可以这样设计”的感觉,对我有...

  • 常用设计模式汇总

    常用设计模式-单例模式 是什么 单例模式是一种常见的软件设计模式,他的核心结构中只包含一个被称为单例的特殊类,通过...

  • iOS工厂模式

    工厂模式(Factory Pattern)是 iOS 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它...

  • 《32个Java面试必考点》学习笔记之三------设计模式与J

    设计模式与Java语言特性知识点汇总知识点详解常用设计模式单例模式工厂模式代理模式责任链模式适配器模式观察者模式构...

  • 03-设计模式(包括KVO/KVC)

    iOS开发常用设计模式? 详细blog链接 MVC模式 MVVM模式 代理模式 单例模式 工厂模式 装饰者模式 观...

网友评论

    本文标题:iOS 常用设计模式汇总

    本文链接:https://www.haomeiwen.com/subject/wziyextx.html