对于面向对象编程中设计模式的概念,你也许已经熟悉,设计模式是有用的抽象化工具,用于解决工程和建筑等其他领域的设计问题,处于同样的目的,软件开发领域借用了这一概念,设计模式是一个对象或类的设计模板,用于解决特定领域经常发生的问题。
设计模式是经过时间证明为有效的,对特定面向对象设计问题主要方面的一种抽象,体现了面向对象设计的重要思想。但是有些设计原则则影响着设计模式。这些原则是构建可复用,可维护的面向对象应用程序的经验法则,比如“优先使用对象组合而不是类继承”和“针对接口编程而不是针对实现编程”。举个例子:通过给程序的变动部分定义接口而对其封装和隔离,这些部分的变动就独立于程序的其他部分,因为它们不依赖于任何细节。以后就可以变更或扩展这些可变的部分而不影响程序的其他的部分,程序将因此能够灵活而可靠的进行变更,因为我们消除了部分于部分之间的依赖关系,减少了耦合,这些益处使得设计模式对于可复用的软件的编写非常重要,程序,如果在设计中使用了设计模式,将来就更易于复用和拓展,更易于变更,而且,基于设计模式的程序会更加简洁而高效,因为达成同样的目的所需的代码会更少。
我们先了解一下设计模式的简史,以及设计模式与Cocoa Touch技术之间的关系。
写给想通过使用设计模式以使软件开发更高效,更有趣的专业人员和有抱负的iOS开发人员,目的在于展示如何将设计模式在iOS的应用开发中实践,会集中讨论各种设计模式对于Cocoa Touch框架及其相关技术的适用性。
你将会学到
各种设计模式的基本概念
在各种设计场景,如何将设计模式应用代码中。
设计模式如何增强应用程序
根据《设计模式》一书,设计模式是对定制来解决特定场景下一般设计问题的类 和 相互通讯的对象 的描述,简而言之,设计模式是为特定场景下的问题而定制的解决方案,特定场景指问题所在的重复出现的场景,问题指特定环境下你想达成的目标,同样的问题在不同的环境下会有不同的限制和挑战,定制的解决方案是指在特定环境下克服了,问题的限制条件而达成的目标的一种设计。
Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。由Alan Kay,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:Objective-C,Actor, Java 和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如Design Patterns, Extreme Programming(XP)和Refactoring等。
设计模式的起源-模型,视图和控制器(MVC)设计模式及其变体至少在Smalltalk诞生初期就已经出现了,这个世纪模式是Cocoa Touch中很多机制和技术的基础。在MVC设计模式中,对象在应用程序中被氛围三组,分别扮演模型,视图和控制器的角色。MVC模式也定义了对象之间跨越其角色的抽象边界的通信方式。MVC队Cocoa Touch应用程序设计起了重要作用,应用程序设计的一个主要步骤是决定对象或类应该属于这三组中的哪一组,如果应用程序的MVC划分的清晰,使用Cocoa Touch框架中的任何技术都相对容易。许多Cocoa Touch技术和架构是建立在MVC之上的,相比于非MVC的应用程序,MVC的应用程序中的对象更加易于拓展和复用。
模型:
在模型对象中封装数据和基本行为,模型对象维护应用程序的数据,并定义操作数据的特定逻辑,模型对象可以复用,理想状况下,模型对象同用于对其他进行显示和编辑的用户界面之间不应该有任何直接的关联。
视图:
使用视图对象向用户展示信息,视图对象可以影响用户操作,并懂得如何将自己展现在屏幕上,视图对象通常从应用程序的模型对象获取数据用于展示,他可以跟一个模型对象的部分,整体或者多个模型对象合作,通常,用户通过它修改数据。虽然视图对象和数据对象之间关系密切,但是MVC模式下他们之间是没有耦合的,除非因性能问题(比如视图需要队数据进行缓存),否则不应该将视图用于存储它所展示的数据。因为视图对象可以与许多不同的模型对象合作,所以它们往往可在不同应用程序之间复用并保持一致,UIKit框架提供了各种类型的视图类,可复用于我们的应用程序。
控制器:
控制器对象就像视图对象和模型对象的中间人,作为中间人或协调人,他建立起沟通渠道,使视图得以直销模型的变更而给予响应。除了协调作用之外,控制器对象还可以为应用程序执行其他操作,比如为应用程序管理其他对象的生命周期,进行设置和协调任务。
举例子:
用户通过操作视图对象(比如文本框中输入)得到的值,可以传给控制器对象。控制器对象也可以让视图对象根据此用户操作改变其外观或者行为,比如禁用某个输入框。依照所需的设计,控制器对象可设计为可复用的或者不可复用的
MVC本身并不是最基本的设计模式,它包含了若干更加基本的设计模式。Cocoa Touch的MVC用到的模式有:组合,命令,中介者,策略,观察者。
组合:视图对象之间以协作的方式构成一个视图层次体系,其中既可以有复合视图(比如表格视图),也可以有独立视图(比如文本框按钮),每个层次的每个视图节点都可以响应用户的操作并把自己会知道屏幕上。
命令:这是一种“目标-动作”机制,视图对象可以推迟其他对象(比如控制器)的执行,让其他对象等到发生了某些事件后再执行,这一机制构成了命令模式。
中介者:控制器对象起着中间人的作用,而这个中间人则采用了中介者模式,它构成了在模型和视图对象之间传递数据的双向通道。
策略:控制器可以是视图对象的一个“策略”。视图对象将自身隔离,以期维持其作为数据展示器的唯一职责,而将一切应用程序特有的界面行为的决定委派给他的策略对象(控制器)
观察者:模型对象向它所关注的控制器等对象发出内部状态变化的通知。
将用户操作传达给控制器 根据用户操作更新模型
视图 控制器 模型
在视图上更新显示 通知控制器发生了更新
总结:用户在画布视图上用手指触摸或拖动(命令),产生一个触摸事件,被触摸的实际视图(图层),就在视图组合中的某个层次上。画布(视图)将触摸消息传达给视图控制器。控制器对象接受到触摸事件及其相关信息,然后应用策略来变更模型的状态,必要时请求视图对象根据此事件变更其行为或者外观。每当变更发生反应到模型上,模型对象就会通知已注册的观察者对象,如控制器,控制器就像一个协调人,他将变更的数据传达给视图,视图可以相应的更新外观。
—————————————————————————————————————————————————————————
网友评论