设计模式之一:概论

设计模式的功能是在软件设计当中是解决一些重复的公共问题。他们是一些模板来帮助你更容易的书写代码和复用你的代码。他们还可能帮助你建立低耦合的代码,你能够很轻松的修改和替换其中的组件。设计模式

若是你已经很熟习设计模式了,我这里有一些好的建议。首先,你已经使用了大量由 Cocoa 建立 iOS 设计模式,同时最好的练习就是去使用她们。第二,这个教程将带给你全面了解全部最新的 iOS 设计模式,她们通常都是由 Cocoa 编写的。xcode

这个教程被分红几个小节。在每个小节里, 你都能在下面读到说明:框架

  • 什么是设计模式ui

  • 为何你应该用她atom

  • 怎么用,在哪里用,在使用当中如何注意一些常见的陷阱设计

在这个教程中,你将要建立一个音乐库的 APP,它可以显示你的音乐专辑和一些相关信息。代理

在开发这个 APP 的过程中,你将会了解到不少常见的 Cocoa 设计模式。code

  • 建立 (Creational):单例 (Singleton)和抽象工厂 (Abstract Factory)cdn

  • 结构 (Structural):MVC,装饰器 (Decorator),适配器 (Adapter),外观 (Facade)和复合器 (Composite)server

  • 行为 (Behavioral):观察者 (Observer),备忘录 (Memento),责任链 (Chain of Responsibility)和命令 (Command)

不要被带偏了,这只是一篇理论文章;你将会在你的音乐 APP 中使用不少的设计模式。在这个教程的最后,你的 APP 看来应该是像这个样子的:

入门指南

下载 启动项目:cdn2.raywenderlich.com/wp-content/uploads/2013/07/BlueLibrary-Starter.zip (复制到电脑下载),从 ZIP 文件中提取文件,用 Xcode 打开 BlueLibrary.xcodeproj。

这没有多少文件,仅仅只有一个默认的 ViewController 文件和一个空的可执行的简单 HTTP 客户端。

提示:你知道吗,当你建立一个新的 Xcode 项目的时候,你的代码已经使用被设计模式?MVC,代理,协议,单例模式 ─ 这些你都能免费获得!:]

在你开始研究第一个设计模式时,你必须建立两个类用于存储和显示专集数据。

从”File\New\File…”(或者使用快捷键 Command + N)。选择 iOS > Cocoa Touch,而后选择 Objective-C class 后点击 Next。设置类的名称为 Album,子类为 NSObject。点击 Next 建立。

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

@propery (nonatomic, copy, readonly) NSString *title, *artist, * genre, *coverUrl, *year;
- (id)initWithTitle:(NSString *)title artist:(NSString *)artist coverUrl:(NSString *)coverUrl year:(NSString *)year;

注意这里的全部属性都是 readonly,Album 对象被建立后是不可以被修改的。

这个方法是用来初始化对象的。当你建立一个新专辑时,须要提供专辑名称,做者,封面 URL 和年份。

如今打开 Album.m 文件而后在 @implementation 和 @end 之间加入以下代码:

- (id)initWithTitle:(NSString*)title artist:(NSString*)artist coverUrl:(NSString*)coverUrl
{
    self = [super init];
    _title = title;
    _artist = artist;
    _coverUrl = coverUrl;
    _year = year;
    _genre = @"Pop";
    return self;
}

这里没有什么复杂的,只是一个简单的建立 Album 实例的初始化方法。

现次从菜单 File\New\File 选择中 Cocoa Touch,而后选择 Object-C class,点击 Next。设置类的名称为 AlbumView,子类为 UIView。点击 Next 建立文件。

提示:若是你会使用快捷键,建立这些会更容易,Command+N 建立新文件,Command+Option+N 建立新的文件夹,Command+B 建立新项目,Command+R 运行项目。

打开 AlbumView.h,在 @interface 和 @end 中 添加一个方法原型

- (id)initWithFrame:(CGRect)fram albumCover:(NSString*)albumCover;

如今打开 AlbumView.m 文件,用下面代码替换 @implementaton 后面的全部代码:

@implementation AlbumView
{
    UIImageView *coverImage;
    UIActivityIndicatorView *indicator;
}

- (id)initWithFrame:(CGRect)frame albumCover:(NSString*)albumCover
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor blackColor];
        // the coverImage has a 5 pixels margin from its frame
        coverImage = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, frame.size.width-10, frame.size.height-10)];
        [self addSubview:coverImage];

        indicator = [[UIActivityIndicatorView alloc] init];
        indicator.center = self.center;
        indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
        [indicator startAnimating];
        [self addSubview:indicator];
        }
    return self;
}

@end

第一个须要注意的地方是 coverImage 是一个实例变量。这个变量表明专集的封面图片。第二个变量是一个提示器,在封面图片开始下载的时候提示用户正在下载。

在初始化的过程当中你须要设置背景为黑色,建立一个比封面图片大 5px 的图片视图,再建立和添加一个活动指示器。

提示:为何私有变量定义在执行文件而不是定义在接口文件?这是由于其它外部类不须要知道 AlbumView 类里的这些变量,这些变量只会在这个类的内部方法中使用到。若是你要开发一些库或者框架给别的开发者使用,遵照这个习俗是很是重要的。

Build 你的项目确保全部代码都能构运行。没有问题?你的第一个设计模式已经准备好了。

相关文章
相关标签/搜索