设计模式之外观模式

定义:
外观模式定义了一个高层的接口, 为子系统的一组接口提供了一个统一的接口.

实例:
外观模式提供了简单明确的接口,该实现对众多子系统的功能进行整合,例如:图片缓存,内部高寒了涉及到其他子系统的处理,如:缓存/下载等处理,在获取一张图片资源的时候只需要调用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
// 再用组合的方式进行处理如:UIImageView + WebCache

@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)和各个子系统之间的解,客户端也无需知晓各个子系统的接口,简化了用户的调用过程,使得系统使用起来更加便捷
  • 符合最少知道原则,用户无需知道子系统内部究竟干了啥

缺点:

  • 增加新的子系统需要更改原有代码,甚至有可能需要更改用户的代码