您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
iOS 软件工程架构与设计模式
 
  2630  次浏览      17
 2018-5-22
 
编辑推荐:
本文来自于csdn,本文简单介绍了iOS视角的常用的设计模式,希望对您的学习有帮助。

单例模式(Singleton Pattern)

单例模式,为了保证一个类有且只有一个实例,无论创建多少次,都是同一个对象比如UIApplication的,UIAccelerometer(重力加速),NSUserDefaults的,NSNotificationCenter。

单例模式的优点:

1.安全。由于创建方法都是??安全的(加锁等操作),在数据方面避免了多重占用,所以数据是可信任的。

2.减少性能开销。因为只创建一次,所以会常驻内存之中,在频繁使用该类的时候可以提升系统的性能。

3.提供全局唯一实例的访问点。

单例模式的缺点:

1.拓展性。无法拓展子类,不适合变化的对象。

2.违背了单一原则。因为只存在一个实例,职责过重。

单例模式适用场景:

1.需要频繁实例化并销毁的对象。

2.创建对象资源占用过多,又需要经常使用。

3.频繁访问数据库或文件的对象。

例如:UIApplication的,NSNotificationCenter(消息中心),的NSFileManager(文件管理),NSUserDefaults的(持久化存储数据),NSURLCache(请求缓存),NSHTTPCookieStorage(应用程序的cookie池)。

代理模式

代理是一种通用的设计模式,在iOS版中对代理设计模式支持的很好,有特定的语法来实现代理模式,OC语言可以通过@protocol实现协议。

代理主要由三部分组成:

协议:用来指定代理双方可以做什么,必须做什么。

代理:根据指定的协议,完成委托方需要实现的功能。

委托:根据指定的协议,指定代理去完成什么功能。

观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。简而言之,就是甲和B,A对乙的变化感兴趣,就注册为乙的观察者,当乙发生变化时通知A,告知乙发生了变化。这个也叫做经典观察者模式。在iOS版中观察者模式的实现有两种方法:通知,KVO。

1.通知利用消息中心发送

2.KVO,全称叫Key Value Observing,顾名思义就是一种观察者模式用于监听属性的变化,KVO和NSNotification有很多相似的地方,用addKeyserver:forKeyPath:options:context方法去观察,用removeObserver:forKeyPath:上下文去移除观察者,用observeValueForKeyPath:ofObject变化:背景:去响应观察者。

工厂模式

工厂模式算是开发中比较常见的设计模式,简单工厂模式,工厂模式和抽象工厂模式,都属于工厂模式。繁简单工厂模式(简单工厂)是类的创建模式,静态工厂方法(静态工厂法)模式,简单工厂模式就是由一个工厂类根据传入的参数决定创建哪一种的产品类。简单工厂模式会包含过多的判断条件,维护起来不是特别方便,工厂模式是主要通过依赖倒置将类的实例化推迟到子类中,实现动态扩展。抽象工厂模式是一个对象产品家族,根据需求提供不同的对象。

工厂模式与抽象工厂的区别:

门脸模式(正面)

像我们可以基于AFN进行一层封装,使我们使用的时候调用统一的API,不管里面是怎么封装的(加密等)。门面模式针对复杂的子系统提供了单一的接口,不需要暴漏一些列的类和API给用户,你仅仅暴漏一个简单统一的API。

门面模式解耦了使用系统的代码和需要隐藏的接口和实现类。它也降低了外部代码对内部子系统的依赖性。当隐藏在门面之后的类很容易发生变化的时候,此模式就很有用了,因为当背后的类发生变化的时候,门面类始终保持了同样的API 。

策略模式

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

分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。

策略模式的使用场景:

1.针对同一类型问题的多种处理方式,仅仅是具体行为有差别时;

2.需要安全地封装多种同一类型的操作时;

3.出现同一抽象类有多个子类,而又需要使用if -else或者switch-case来选择具体子类时。

 

   
2630 次浏览       17
相关文章

深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
相关文档

重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
相关课程

基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程