美文网首页
iOS设计模式之门面模式

iOS设计模式之门面模式

作者: 点滴86 | 来源:发表于2024-06-01 23:09 被阅读0次

    门面模式

    门面模式主要在接口设计方面使用。
    为了保证接口的可复用性,需要将接口尽量设计的细粒度一点,职责单一一点。但是如果接口的粒度过小,在接口的使用者开发一个业务功能时,就会导致需要调用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.解决分布式事务问题

    相关文章

      网友评论

          本文标题:iOS设计模式之门面模式

          本文链接:https://www.haomeiwen.com/subject/sjijqjtx.html