#import <Foundation/Foundation.h>
#import "Facade.h"
int main (int argc,const char * argv[])
{
@autoreleasepool{
Facade *facade = [[Facade alloc]MyInit];
[facade MethodA];
[facade MethodB];
}
return 0;
}
在开发软件时候,考虑使用外观模式的情况一般分为三种情况。第一种情况,设计初始阶段,应该要有意识的将不同的两个分层分离,层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。第二种情况,在开发阶段子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。第三种情况,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,如果有新的需求,那么可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作,这样可以保持较低的耦合度。
实例进阶
目前你有 PersistencyManager 来在本地存储专辑数据,HTTPClient 处理远程通信。项目中其它的类跟这些逻辑都没关。
执行这个模式,只有 LibraryAPI 来保存 PersistencyManager 和 HTTPClient 的实例。之后,LibraryAPI 将会公开一个简单的 API 来访问这些服务。
LibraryAPI 将会公开给其它代码,但是它隐藏了 APP 中 HTTPClient 和 PersistencyManager 的复杂部分。
打开 LibraryAPI.h,在顶部引入面文件:
#import "Album.h"
接下来,在 LibraryAPI.h下面添加如下方法:
- (NSArray*)getAlbums;
- (void)addAlbum:(Album*)album atIndex:(int)index;
- (void)deleteAlbumAtIndex:(int)index;
现在,这些方法都公开给了其它类。











