定义:
外观模式定义了一个高层的接口, 为子系统的一组接口提供了一个统一的接口.
实例:
外观模式提供了简单明确的接口,该实现对众多子系统的功能进行整合,例如:图片缓存,内部高寒了涉及到其他子系统的处理,如:缓存/下载等处理,在获取一张图片资源的时候只需要调用getImageWithUrl:(NSString *)url 接口就可以了,达到了与下载和缓存的解耦
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @implementation WebImage
+ (UIImage *)getImageWithUrl:(NSString *)url { id cacheImage = [ImageWebCaches getImageFromCacheWithUrl:url]; if (cacheImage) { return cacheImage; }
id downloadImage = [ImageWebDownloader downloadImageWithUrl:url]; if (downloadImage) { [ImageWebCaches cacheImage:downloadImage url:url]; return downloadImage; } else { return nil; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
@implementation UIImageView + WebCache
- (void)sd_setImageWithUrl:(NSString *)urlString { UIImage *image = [WebImage getImageWithUrl:urlString]; if (image) { self.image = image; } }
@end
|
1 2 3
| UIImageView *imageView = [UIImageView new]; [imageView sd_setImageWithUrl:url];
|
优点:
- 实现了用户(上文中的UIImageView)和各个子系统之间的解,客户端也无需知晓各个子系统的接口,简化了用户的调用过程,使得系统使用起来更加便捷
- 符合最少知道原则,用户无需知道子系统内部究竟干了啥
缺点:
- 增加新的子系统需要更改原有代码,甚至有可能需要更改用户的代码