IOS 和ANDROID操作系统都是目前流行的移动操作系统,被移动终端和智能设备大量采用,两者都采用了先进的软件技术进行设计,为了方便应用开发两者都采用了先进的设计模式。两者在框架设计上都采用了什么技术?都采用了什么设计模式?两者设计思路和应用开发模式有什么异同呢?

  1. 两者都采用了框架模式。

IOS 的框架称为Cocoa Touch。

框架提供两个作用,一是类的集合,每个类构建一个问题空间,并提供完整的解决方案和服务;二更重要的是框架中的类相互依赖构成一个整体,制订并实现整个应用程序的结构。框架定义的结构是泛型结构,为应用程序提供一个执行的模板,因此许多框架类的实现是抽象的或者有意不完整,这样的类通常实现大量的常见代码,但却让工作的重要部分,要么未完成,要么以安全的默认方式完成。

因为应用程序结构是通用的,开发人员通过框架提供的钩子或其它方式如子类化将其特殊化,以满足特定应用的要求;设计一个应用程序就是将应用程序代码插入到框架提供的设计中来完成设计,并由框架驱动程序的执行和管理应用程序的生命周期。

要使用框架,开发人员必须接受它定义的应用程序结构,然后根据需要,尽可能多的使用和定制它的类,将特定的应用进行改造,以适合该结构。

从广义的隐喻层面而言,框架就像房屋的框架,而应用程序代码就好比大门、窗户、壁板和其他元素,是这些东西让房子与众不同。

IOS 的框架和ANDROID框架都为应用程序提供了多种方式,来修改和扩展其通用行为。

特定于应用的行为添加到框架的一种方式,就是创建框架类的自定子类。子类填补了其超类中的空隙,提供了框架类所缺少的部分。自定子类的实例,占据其在框架所定义的对象网络中的位置,也继承框架与其他对象合作的能力。这种设计模式称为模板模式。

如ANDROID就采用这种模式来实现应用程序行为的定制化。 ANDROID框架为应用程序提供了ACTIVITY、 SERVICE、Content providers、Broadcast receivers四大应用组件的通用默认实现,应用程序通过子类化这些组件,并根据需要覆盖组件的一些方法就可以完成一个应用程序开发。

而IOS则采用委托和协议模式来实现应用程序的一些特定行为。

在IOS中, 由Cocoa Touch提供的框架之一UIKit来提供和管理应用程序的行为,包括应用程序的启动直到退出,UIKit 框架管理着应用程序的许多核心行为。

UIKit 框架包括一个UIApplication 对象,UIApplication 对象是应用程序的心脏,它从系统接收事件,然后将事件分派到应用程序实现的自定代码进行处理。

具体的应用程序只需实例化UIApplication 对象对象即可,无需进行子类化,应用程序的特定行为采用委托和协议模式由一个应用程序委托对象来实现。

应用程序在调用UIApplication 对象的UIApplicationMain函数来启动应用时,通过实例化一个应用程序委托对象并作为参数传给UIApplicationMain函数。

应用程序委托作为 UIResponder 的子类,也实现了UIApplicationDelegate协议,用来处理 UIApplication 对象委派的应用程序相关事件(主要是各种应用程序状态改变事件),来实现应用程序的定制化。

协议模式是osx 操作系统框架采用的特有的设计模式之一。协议是可编程接口的声明,任何类都可以实施它的方法。与协议相关联的类实例,调用协议的方法,并获取由该类正式采用和实现该协议所返回的值。对象之间的此类通信,产生了一个特定目标,例如解析 XML 代码或拷贝对象。协议接口两边的对象可以通过继承,实施远距离彼此相关。协议因此和委托一样,可作为子类化的替换手段。Apple 提供的框架,声明了数十个协议。

二  应用开发都采用了模型-视图-控制器(MVC) 设计模式

如IOS框架中的视图控制器对象担当MVC模式中的控制器角色,管理应用程序内容在屏幕上的呈现。视图控制器负责显示和管理单个视图及其分视图,以及那些视图与应用程序的其他部分之间的交互。呈现时,视图控制器将视图安装到应用程序的窗口中,使它们显示出来。

在ios 的UIKit 框架中的UIViewController 类是所有视图控制器对象的基础类, 每个视图控制器对象是 UIViewController 类的实例,它提供了一些默认功能,用于载入视图、呈现视图和旋转视图,以响应设备的旋转以及几个其他标准的系统行为。应用程序实现时需要对UIViewController 类进行子类化,用来载入应用程序特定视图。

UIKit 和其他框架定义附加的视图控制器类,来实现标准系统界面,如图像挑选器、标签栏界面和导航界面。

视图控制器对象提供基础结构,来管理内容相关的视图并协调视图的显示与隐藏。视图控制器还用来管理应用程序视图的子层次结构。

因为 iOS 应用程序显示内容的空间很有限,视图控制器也提供了所需要的基础结构,从一个视图控制器中撤出视图,以另一个视图控制器中的视图来替换。因此,视图控制器是您实施各种类型的内容转换的方式。 视图控制器对象,可以作为自包含的单元来看,它处理其自身视图的创建和销毁,处理其视图在屏幕上的显示,并协调视图和应用程序中的其他对象之间的交互。

应用程序通过串联图或nib资源文件加载视图控制器和相关的视图。串联图或nib资源文件含有视图和视图控制器,应用程序通过它们,将内容呈现在屏幕上。串联图中的视图,是根据显示它们的视图控制器来组织的。串联图也确定一组视图的转换(称为过渡),将用户从一组视图带到另一组。

当您创建项目时,主串联图文件的名称通过应用程序包含的 Info.plist 文件中的 NSMainStoryboardFile 键来指定。使用 nib 文件(而不是串联图)的应用程序,可以使用 NSMainNibFile 键替换 NSMainStoryboardFile 键,并使用该键来指定使用的主 nib 文件。

IOS框架的窗口对应一个 UIWindow 对象,UIWindow 对象协调一个或多个视图在屏幕上的呈现。大多数应用程序只有一个窗口,用于在主屏幕上呈现内容,但应用程序可能会有另外一个窗口,将内容显示在外接显示器上。

要更改您的应用程序的内容,需使用视图控制器,来更改在对应窗口中显示的视图。您不会把窗口本身替换。

除了充当视图的宿主以外,窗口还配合 UIApplication 对象工作,将事件传送到视图和视图控制器。

IOS框架的视图对象包括视图、控制和层对象等对象,视图和控制将应用程序的内容直观地呈现出来。视图用来将内容绘制在指定的矩形区域内,并响应该区域的事件。控制是一类专门的视图,负责实施常见的界面对象,如按钮、文本栏和切换开关。

视图对象通过应用程序的控制器对象,了解模型数据的更改,并通过控制器对象,将用户发动的修改,传达到应用程序的模型对象

UIKit 框架提供标准的视图,每个视图对象最终继承自 UIView 类,用于呈现许多类型的内容。通过直接将 UIView(或它的子类)子类化,您还可以定义自己的自定视图。

除了包括视图和控制以外,应用程序还可以将 Core Animation 层并入其视图和控制分层结构中。层对象实际是代表视觉内容的数据对象。视图在幕后大量使用层对象,来渲染其内容。您还可以将自定的层对象,添加到界面,以实施复杂的动画和其他类型的复杂视觉效果。

UIKit 框架提供的视图组织为视图层次。应用程序所显示的视图,会排列成层次结构(直观上基于包含)。此模式允许应用程序将单个视图和合成视图同等对待。层次的根部为一个窗口对象;根部以下的每个视图,都有一个父视图,以及零个或多个子视图。父视图包含子视图。视图层次是绘图和事件处理的结构性组件。

IOS框架中的模型对象可以由UIKit框架提供的UIDocument对象来实现文档类型的数据模型。还可以根据需要采用框架提供的数据类型定义自己的数据模型及其相关业务逻辑。

IOS应用程序还可以采用Core Data框架来创建和实现模型对象。Core Data 提供了一个基础结构,来管理对模型对象所做的修改,并将模型对象存储到一个文件中,然后再将它们取回来。Core Data框架还提供了许多其它特性:如自动支持撤销和重做,以及维持对象之间的相互关系;允许在任何给定的时间内,仅将模型对象的子集保存在内存中;使用模式来描述模型对象;允许维护编辑对象的不相交集合;支持数据储存版本管理和迁移。版本管理可让您轻松地将旧版本的用户文件升级到当前版本;允许在
iCloud 中储存数据,然后从多个设备访问数据。

而android 系统没有独立的视图控制器对象,而由应用程序的ACTIVITY组件担当视图控制器角色,用来创建和载入、呈现视图,通过模型适配器Adapter接口加载模型对象提供的数据及更新显示到视图上。用户在视图上对数据模型的改变也由ACTIVITY负责通过模型适配器接口更新到模型。Adapter担当数据模型和视图之间的中间人角色。

android 系统的窗口对象对应用程序不开放,由框架的窗口管理服务进行管理。

android 系统也是一个应用程序对应一个窗口,对应着系统提供的root view 对象。视图对象在窗口中进行呈现。

android 系统的每个视图对象都继承自View类,包括View和ViewGroup 对象。一个应用的ui 由View和ViewGroup 对象组成的视图树构造,View对象用来在屏幕上绘制内容并和用户交互,如按钮buttons 或 text fields等。ViewGroup 对象 是视图的容器,可以包含其它View和ViewGroup对象,以便实现 界面的布局。 ViewGroup 对象和其中包含的其它View和ViewGroup对象以
视图树的形式加以组织。

android 系统的应用程序ui的可视结构由具体的布局对象layout 来定义,每个具体的布局对象layout都是一个 ViewGroup 对象 。包括Linear Layout、Relative Layout、Web View等。

组成应用程序界面的由多个子视图组成的视图对象通过担当视图控制器角色的activity组件 的setContentView函数加载进应用进行显示。

android 系统的模型对象的提供主要由Content providers来提供,并通过activity提供的一个模型适配器Adapter对象提供给视图。

版权所有,转载时请显要处注明链接,谢谢!

最新文章

  1. Yeelink 初探
  2. 微博RPC框架motan入门笔记
  3. OS10.11系统下 安装cocoapods 以及 安装cocoapods-xcode-plugin-master插件来加载三方框架
  4. cpu为什么使用虚拟地址到物理地址的空间映射,解决了什么样的问题?
  5. 压缩上传并预览 flash
  6. (转载)Cocos2dx-OpenGL ES 2.0教程:你的第一个三角形(1)
  7. php二维数组,按照指定的key,去排序value值
  8. 微信JS-SDK 接口调用与 php 遇到的坑
  9. git学习笔记 (三)
  10. git使用经验
  11. Nginx提示502和504错误的终极解决方案
  12. input===》name属性异常错误
  13. android自定义View的绘制原理
  14. [HDU 2036]改革春风吹满地
  15. 【一天一道LeetCode】#223. Rectangle Area
  16. javascript引擎执行的过程的理解--语法分析和预编译阶段
  17. Nginx日志常用统计分析命令
  18. linux 大冒险
  19. JAVA Scanner的简单运用
  20. python进行爬虫

热门文章

  1. Github上的Android项目介绍之ListViewAnimation(针对listView item的侧滑菜单)(1)
  2. nginx中configure脚本支持的常用选项,拍摄自《Nginx高性能Web服务器详解》
  3. 2.Cocos2d-x-3.2编写3d打飞机,项目代码总结
  4. Python模块探秘之EasyGui
  5. Android水印相机
  6. 15 ActionBar.Tab 以及保存fragment对象 代码案例
  7. UNIX网络编程——客户/服务器程序设计示范(总结)
  8. Android日历视图(CalendarView)讲解-android学习之旅(三十六)
  9. UE4使用widget创建UI界面播放视频
  10. J2EE Exception:WELD-001408 Unsatisfied dependencies for type [SelectModelFactory] with qualifiers [@