门面模式
门面模式主要在接口设计方面使用。
为了保证接口的可复用性,需要将接口尽量设计的细粒度一点,职责单一一点。但是如果接口的粒度过小,在接口的使用者开发一个业务功能时,就会导致需要调用n多细粒度的接口才能完成。调用者肯定会抱怨接口不好用。相反,如果接口粒度设计的太大,一个接口返回n多数据,要做n多事情,就会导致接口不够通用、可复用性不好。接口不可复用,那针对不同的调用者的也无需求,就需要开发不同的接口来满足,这就会导致系统的接口无限膨胀。
门面模式也叫外观模式,英文是Facade Design Pattern。门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。
假设有一个系统A,提供了a、b、c、d四个接口。系统B完成某个业务功能需要调用A系统的a、b、d接口。利用门面模式,提供一个包裹a、b、d接口调用的门面接口x,给系统B直接使用。代码如下:
@interface DMASystem : NSObject
- (void)functionA;
- (void)functionB;
- (void)functionC;
- (void)functionD;
@end
@implementation DMASystem
- (void)functionA
{
}
- (void)functionB
{
}
- (void)functionC
{
}
- (void)functionD
{
}
@end
@interface DMFacade : NSObject
- (instancetype)initWithASystem:(DMASystem *)aSystem;
// 需要顺序调用ASystem提供的 a 、b 、d 三个接口
- (void)function;
@end
@interface DMFacade ()
@property (nonatomic, strong) DMASystem *aSystem;
@end
@implementation DMFacade
- (instancetype)initWithASystem:(DMASystem *)aSystem
{
if (self = [super init]) {
self.aSystem = aSystem;
}
return self;
}
- (void)function
{
[self.aSystem functionA];
[self.aSystem functionB];
[self.aSystem functionD];
}
@end
门面模式的应用场景举例
- 1.解决易用性问题
门面模式可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。 - 2.解决性能问题
通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高App客户端的相应速度。 - 3.解决分布式事务问题
网友评论