iOS设计模式之一:MVC模式和单例模式

381 查看

iOS设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不会太关注它。

在软件设计领域,设计模式是对通用问题的可复用的解决方案。设计模式是一系列帮你写出更可理解和复用代码的模板,设计模式帮你创建松耦合的代码以便你不需要费多大力就可以改变或者替换代码中的组件。

如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践。

其次本指南将带你使用绝大多数(并不是所有)Cocoa中频繁使用的IOS设计模式。

本指南被分为了许多部分,每个部分涉及一个设计模式。在每个部分中,你将会了解到如下内容:

  • 设计模式是什么?
  • 你为什么要用设计模式?
  • 如何使用设计模式,以及在使用的时候,哪里是合适的,哪里是需要注意的坑。
  • 在本指南中,你将创建一个音乐库应用,这个应用将显示你的专辑以及它们相关联的信息。
  • 在开发本应用的过程中,你将熟悉被大量使用的Cocoa设计模式:
  • 创建型:单利(单态)和抽象工厂
  • 结构型:模型-视图-控制器,装饰器,适配器,外观(门面)和组合模式
  • 行为型:观察者,备忘录,责任链和命令模式

不要被误导认为这是一篇关于设计模式理论的文章,在本音乐应用中,你将使用这些设计模式中的大多数,最终你的音乐应用将长的像下图所示的那样:
IOSDesign

我们开始吧!
下载starter project,导出zip文件的内容,然后用xcode打开BlueLibrary.xcodeproj.

工程里面没有太多的文件,仅仅包含缺省的ViewController以及空实现的HTTP Client.

注意:当你创建一个新的Xcode工程的时候,你的代码其实已经涉及到了设计模式,你知道吗?模型-视图-控制器,委托,协议,单例-你不费吹灰之力就可以免费使用它们啦。

在你深入到第一个设计模式之前,你首先必须创建两个类,用这两个类去保存和显示音乐库专辑的信息。

在Xcode中,导航到”File\New\File…”(或者按Command+N快捷键),选择IOS>Cocoa Touch,然后Objective-C class,点击下一步。设置类名称为Album,父类选择NSObject,点击下一步,然后创建。

打开Album.h文件,在@interface和@end之间,增加如下的属性和方法原型:


注意到新增代码中所有的属性都是只读的,因为在Album对象创建以后,不需要修改它们的值。

新增的方法是对象初始化器(object initializer),当你创建一个新的专辑(album)对象的时候,你需要传递专辑(album)名,艺术家,专辑封面URL,以及年份。

现在打开Album.m文件,在@implementation和@end之间增加如下代码:


这里没什么复杂花哨的东西,仅仅是一个创建Album实例的初始化方法而已。

在Xcode中,再一次导航到”File\New\File…”选择Cocoa Touch,然后Objective-C class,点击下一步。设置类名为AlbumView,但是这一次设置父类为UIView。点击下一步然后点击创建。

注意:如果你发现键盘快捷键更容易使用,Command+N将创建一个新文件,Command+Option+N将创建一个新组,Command+B将构建你的工程,Command + R将运行它。

现在打开AlbumView.h,在@interface和@end之间增加如下的方法原型:


现在打开AlbumView.m,用如下代码替换@implementation之后所有的代码:

上面的代码里,你首先需要注意的是coverImage实例变量。它表示这个专辑的封面图。第二个变量是一个通过旋转来指示封面图正在下载的指示器。

在初始化器的实现中你设置背景颜色为黑色,创建了有5像素边框的图片视图,同时还创建了指示器。

注意:你可能想知道为什么私有变量在实现文件中定义,而不是在接口文件中?这是因为AlbumView以外的类不需要知道这些变量的存在,这些变量仅仅只在类内部函数使用。如果你在开发给其它开发者使用的框架,这个约定就显得十分重要了。

构建(Command + B)你的工程确保每件事情都井井有条,都ok吗?然后准备迎接我们的第一个设计模式!

模型视图控制器(MVC)模式设计模式之王

IOSDesign2

模型-视图-控制器(MVC)是Cocoa的构建块之一,毫无疑问它是使用最频繁的设计模式。它根据通用的角色去划分类,这样就使得类的

职责可以根据角色清晰的划分开来。>IOSDesign2

模型-视图-控制器(MVC)是Cocoa的构建块之一,毫无疑问它是使用最频繁的设计模式。它根据通用的角色去划分类,这样就使得类的

职责可以根据角色清晰的划分开来。在写代码的时候也不会太关注它。

在软件设计领域,设计模式是对通用问题的可复用的解决方案。设计模式是一系列帮你写出更可理解和复用代码的模板,设计模式帮你创建松耦合的代码以便你不需要费多大力就可以改变或者替换代码中的组件。

如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践。

其次本指南将带你使用绝大多数(并不是所有)Cocoa中频繁使用的IOS设计模式。

本指南被分为了许多部分,每个部分涉及一个设计模式。在每个部分中,你将会了解到如下内容:

  • 设计模式是什么?
  • 你为什么要用设计模式?
  • 如何使用设计模式,以及在使用的时候,哪里是合适的,哪里是需要注意的坑。
  • 在本指南中,你将创建一个音乐库应用,这个应用将显示你的专辑以及它们相关联的信息。
  • 在开发本应用的过程中,你将熟悉被大量使用的Cocoa设计模式:
  • 创建型:单利(单态)和抽象工厂
  • 结构型:模型-视图-控制器,装饰器,适配器,外观(门面)和组合模式
  • 行为型:观察者,备忘录,责任链和命令模式

不要被误导认为这是一篇关于设计模式理论的文章,在本音乐应用中,你将使用这些设计模式中的大多数,最终你的音乐应用将长的像下图所示的那样:
IOSDesign

我们开始吧!
下载starter project,导出zip文件的内容,然后用xcode打开BlueLibrary.xcodeproj.

工程里面没有太多的文件,仅仅包含缺省的ViewController以及空实现的HTTP Client.

注意:当你创建一个新的Xcode工程的时候,你的代码其实已经涉及到了设计模式,你知道吗?模型-视图-控制器,委托,协议,单例-你不费吹灰之力就可以免费使用它们啦。

在你深入到第一个设计模式之前,你首先必须创建两个类,用这两个类去保存和显示音乐库专辑的信息。

在Xcode中,导航到”File\New\File…”(或者按Command+N快捷键),选择IOS>Cocoa Touch,然后Objective-C class,点击下一步。设置类名称为Album,父类选择NSObject,点击下一步,然后创建。

打开Album.h文件,在@interface和@end之间,增加如下的属性和方法原型:


注意到新增代码中所有的属性都是只读的,因为在Album对象创建以后,不需要修改它们的值。

新增的方法是对象初始化器(object initializer),当你创建一个新的专辑(album)对象的时候,你需要传递专辑(album)名,艺术家,专辑封面URL,以及年份。

现在打开Album.m文件,在@implementation和@end之间增加如下代码:


这里没什么复杂花哨的东西,仅仅是一个创建Album实例的初始化方法而已。

在Xcode中,再一次导航到”File\New\File…”选择Cocoa Touch,然后Objective-C class,点击下一步。设置类名为AlbumView,但是这一次设置父类为UIView。点击下一步然后点击创建。

注意:如果你发现键盘快捷键更容易使用,Command+N将创建一个新文件,Command+Option+N将创建一个新组,Command+B将构建你的工程,Command + R将运行它。

现在打开AlbumView.h,在@interface和@end之间增加如下的方法原型:


现在打开AlbumView.m,用如下代码替换@implementation之后所有的代码:

上面的代码里,你首先需要注意的是coverImage实例变量。它表示这个专辑的封面图。第二个变量是一个通过旋转来指示封面图正在下载的指示器。

在初始化器的实现中你设置背景颜色为黑色,创建了有5像素边框的图片视图,同时还创建了指示器。

注意:你可能想知道为什么私有变量在实现文件中定义,而不是在接口文件中?这是因为AlbumView以外的类不需要知道这些变量的存在,这些变量仅仅只在类内部函数使用。如果你在开发给其它开发者使用的框架,这个约定就显得十分重要了。

构建(Command + B)你的工程确保每件事情都井井有条,都ok吗?然后准备迎接我们的第一个设计模式!

模型视图控制器(MVC)模式设计模式之王

IOSDesign2

模型-视图-控制器(MVC)是Cocoa的构建块之一,毫无疑问它是使用最频繁的设计模式。它根据通用的角色去划分类,这样就使得类的

职责可以根据角色清晰的划分开来。p>

涉及到的三个角色如下:
Model:
模型保存应用程序的数据,定义了怎么去操作它。例如在本应用中模型就是Album类。
View:
视图是模型的可视化表示以及用户交互的控件;基本上来说,所有的UIView对象以及它的子类都属于视图。在本应用中AlbumView代表了视图。
Controller:
控制器是一个协调所有工作的中介者(Mediator)。它访问模型中的数据并在视图中展示它们,同时它们还监听事件和根据需要操作数据。你可以猜猜哪个类是控制器吗?它正是:ViewController。

一个MVC模式的好的实现也就意味着每一个对象都会被划分到上面所说的组中。

我们可以很好的用下图来描述通过控制器实现的视图到模型的交互过程:
IOSDesign5