外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。
现在,实现一个简易的OC版本外观模式,目录如下:
- Shape.h为定义需要实现的接口,目前只有一个测试方法
-(void)draw
;
#import <Foundation/Foundation.h>
@protocol Shape <NSObject>
-(void)draw;
@end
- Circle和Square为实现了Shape.h接口的具体实现类,目前内部只实现了
-(void)draw
;
#import "Circle.h"
@implementation Circle
-(void)draw{
NSLog(@"%s",__func__);
}
@end
#import "Square.h"
@implementation Square
-(void)draw{
NSLog(@"%s",__func__);
}
@end
- ShapeManager为Facade外观提供类,统一各个子系统,为子系统中的一组接口提供一个一致的界面
#import <Foundation/Foundation.h>
#import "Circle.h"
#import "Square.h"
@interface ShapeManager : NSObject
-(void)drawSquare;
-(void)drawCircle;
@end
#import "ShapeManager.h"
@implementation ShapeManager
-(void)drawCircle{
Circle *_circle = [[Circle alloc]init];
[_circle draw];
}
-(void)drawSquare{
Square *_square = [[Square alloc]init];
[_square draw];
}
@end
- 外部使用就可以只导入ShapeManager,而不关心各子模块的复杂实现
- (void)viewDidLoad {
[super viewDidLoad];
ShapeManager *shapeManager = [[ShapeManager alloc]init];
[shapeManager drawSquare];
[shapeManager drawCircle];
}
打印如下:
2018-02-09 16:18:52.971337+0800 测试[32072:7644268] -[Square draw]
2018-02-09 16:18:52.971456+0800 测试[32072:7644268] -[Circle draw]