外观设计模式

  

外观设计模式

外观设计模式向复杂的子系统提供了简单的接口,相比将一系列的类和他们的接口暴露给用户,你只需要暴露一些简单的未定义的API。

接下来的图片解释了这一概念。

外观设计模式”> <br/> </p> <p>使用这些API接口的人完全没有意识到你这下面隐藏的复杂性,在有一系列类,特别是他们使用很复杂或者难以理解的时候,这个模式是非常好的。</p> <p>外观设计模式使用从接口层面去使用,在实现技术上隐藏而将代码解藕了。它也减少了你外部的代码对于内部子系统代码的依赖性。它在外观模式可能要进行
  改变的情况下也是很有用的,因为外观的类仍然可以保持相同的API当背后的情况发生了变化时,比如,有一天你想改变背后的服务代码,你不用去改变这些代码
  因为这些API不会改变。</p> <h3>如何使用外观设计模式</h3> <p>目前你有PersistencyManager类去本地保存专辑的数据,而HTTPClient去处理远程的数据交流。工程里面的其他代码不应该意识到这个逻辑。</p> <p>要实现这个LiabraryAPI你应该保持住PersistencyManager和HTTPClient的一个实例。然后LiabraryAPI会暴露一个简单的接口去访问这些服务。</p> <p>,,,,,,,,,,小贴士:通常一个单例会在应用程序的整个生命周期都会存在,你不应该持有过多的单例指针指向其他物体,因为它们在应用关闭之前不会被释放。这个设计应该是像下面的这个图这样。</p> <p> LiabraryAPI会暴露给其他代码,但是会隐藏PersistenceManager和HTTPClient针的复杂性。</p> <p>打开LiabraryAPI。h,添加#进口”专辑。h”,接下来添加这些方法的人声明到里面。</p> <pre类=安康;(NSArray  *) getAlbums;,,   ,,   安康;(空白)addAlbum:(Album  *) Album  atIndex: (int)指数;,,   ,,   安康;(void) deleteAlbumAtIndex: (int)指数;

LiabraryAPI。米文件。加入

# import “HTTPClient.h”,,   ,,   # import “PersistencyManager。h”

@interfaceLibraryAPI  (),,   ,,   {,,   ,,   ,,,HTTPClient  *客户,,,   ,,   ,,,PersistencyManager  *经理,,,   ,,   ,,,BOOL  isOnLine;,,   ,,   }

LiabraryAPI。米文件中添加下面代码:

- - - - - - (id) init ,   ,,   {,,   ,,   ,,,if  (=self  [superinit]), {,,   ,,   ,,,,,,,client =, [[HTTPClientalloc] init];,,   ,,   ,,,,,,,manager =, [[PersistencyManageralloc], init];,,   ,,   ,,,,,,,isOnLine =,不,,,   ,,   ,,,},,   ,,   ,,,returnself;,,   ,,   }






- (NSArray  *) getAlbums ,   ,,   {,,   ,,   ,,,return  [managergetAlbums];,,   ,,   },,   ,,   ,安康;addAlbum(空白):(Album  *) Album  atIndex: (int) index ,   ,,   {,,   ,,   ,,,(manageraddAlbum: album  atIndex:指数),,,   ,,   ,,,if  (isOnLine), {,,   ,,   ,,,,,,,,,,,,,,,(clientpostRequest: @“/api/addAlbum”身体:[album 描述]];,,   ,,   ,,,},,   ,,   },,   ,,   ,,,,   (空白)saveAlbums 作用;   ,,   {,,   ,,   ,,,(managersaveAlbums);,,   ,,   },,   ,,   安康;(void) deleteAlbumAtIndex: (int) index ,   ,,   {,,   ,,   ,,,(managerdeleteAlbumAtIndex:指数),,,   ,,   ,,,if  (isOnLine), {,,   ,,   ,,,,,,,(clientpostRequest: @“/api/deleteAlbum”身体:[@(指数),描述]];,,   ,,   ,,,},,   ,,   }


,

安康;addAlbum(空白):(Album  *) Album  atIndex: (int)指数



外观设计模式