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对象提供给视图。

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

IOS 与ANDROID框架及应用开发模式对比一的更多相关文章

  1. IOS 与ANDROID框架及应用开发模式对照一

    IOS 和ANDROID操作系统都是眼下流行的移动操作系统,被移动终端和智能设备大量採用,两者都採用了先进的软件技术进行设计,为了方便应用开发两者都採用了先进的设计模式. 两者在框架设计上都採用了什么 ...

  2. UI开发模式对比:JSP、Android、Flex

    前一篇文章分析了Java平台下不同类型WEB框架对开发模式的影响,多数Java领域的WEB框架都是聚焦于服务端MVC的实现,这些框架对View的支持,通常是基于标准的JSP或类似JSP的模板技术如Fr ...

  3. Hybrid App—Hybrid App开发模式介绍和各种开发模式对比

    什么是Hybrid App 最开的App开发只有原生开发这个概念,但自从H5广泛流行后,一种效率更高的开发模式Hybrid应运而生,它就是"Hybrid模式".Hybrid APP ...

  4. Android应用中MVP开发模式

    所谓MVP(Model-View-Presenter)模式.是将APP的结构分为三层: view - UI显示层 view 层主要负责: 提供UI交互 在presenter的控制下修改UI. 将业务事 ...

  5. Android 框架修炼-自己开发高效异步图片加载框架

    一.概述 目前为止,第三方的图片加载框架挺多的,比如UIL , Volley Imageloader等等.但是最好能知道实现原理,所以下面就来看看设计并开发一个加载网络.本地的图片框架. 总所周知,图 ...

  6. 【Android - 框架】之MVP模式的使用

    提起MVP架构模式,大家可能首先想到的是它的"前辈"MVC模式.MVC由Model.View.Controller组成,请求从Controller进入后进行业务判断,然后交给Mod ...

  7. Android 必须知道2018年流行的框架库及开发语言,看这一篇就够了!

    导语 2017 已经悄悄的走了,2018 也已经匆匆的来了,我们在总结过去的同时,也要展望一下未来,来规划一下今年要学哪些新技术.这几年优秀Android的开源库不断推出,新技术层出不穷,需要我们不断 ...

  8. 《React Native 精解与实战》书籍连载「配置 iOS 与 Android 开发环境」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  9. App原生、混合、纯WEB开发模式的优劣分析

    什么叫做原生App? 什么是混合app? 什么是Web App开发? Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS.Android等不同的手机操作系统 ...

随机推荐

  1. ROS_Kinetic_x 目前已更新的常用機器人資料 rosbridge agvs pioneer_teleop nao TurtleBot

    Running Rosbridge Description: This tutorial shows you how to launch a rosbridge server and talk to ...

  2. 视频编码器评测系统:VideoCodecRank

    视频编码器领域一直有个比较复杂的问题:mpeg2.divx.xvid.mpeg4.vp8.vp9.x264.openh264.x265等等这一系列编码器到底哪个好?而对于同一种视频编码器,又包括了各种 ...

  3. 早期Swift中Cocos2D初始化代码的重构

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在早期的Swift中在子类里只能调用超类的design ...

  4. 使用TT模板+mvc+wcf实现简单查询

    今天是除夕,小编的这篇博客是掐着点儿发的,在此,祝各位小伙伴新年快乐,身体健康,万事如意:喜从天降,欣喜若狂:喜气盈门,好事成双:好人好运,金玉满堂:神采飞扬,如愿以偿,财源滚滚来,福如东海长:伴随着 ...

  5. android仿iphone的地区选择

    最近项目要做一个,类似淘宝手机客户端的,选择收货地址的三级联动滚动选择组件,下面是它的大致界面截图: 在IOS中有个叫UIPickerView的选择器,并且在dataSource中定义了UIPicke ...

  6. 用 Freemarker 生成 word 文档

     阅读目录 添加图片 自定义载入模板 1.       用word写一个需要导出的word模板,然后存为xml格式. 2.       将xml中需要动态修改内容的地方,换成freemarker的 ...

  7. 当freemarker中EL表达式的值为空时出现异常的解决方法

     <#list pageView.list as msg>      <form name="msgForm" id="msgForm" ...

  8. React Native入门教程 1 -- 开发环境搭建

    有人问我为啥很久不更新博客..我只能说在学校宿舍真的没有学习的环境..基本上在宿舍里面很颓废..不过要毕业找工作了,我要渐渐把这个心态调整过来,就从react-native第一篇博客开始.话说RN也出 ...

  9. [C++学习历程]基础部分 C++中的函数中的值参数、地址参数、引用参数实际例子

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/20406269 作者:sushengmiyan // sushengmiyanTest. ...

  10. Linux多线程实践(1) --线程理论

    线程概念 在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列/指令序列"; 一切进程至少有一个执行线程; 进程  VS. 线程  ...