外观模式解决的问题
如果在viewController里绘制图形,需要单独的写很多行代码,耦合性很高
// 绘制了一个圆
Circle *circle = [Circle new];
circle.radius = 10.f;
[circle draw];
// 绘制了一个矩形
Rectangle *rectangle = [Rectangle new];
rectangle.width = 10.f;
rectangle.height = 20.f;
[rectangle draw];
外观模式
- 用一个类将复杂的子系统隔离开来解耦合
- 如果在同一文件内就是封装,用不同的文件来隔离就是外观模式。
- 主系统只考虑输入什么参数,不必考虑系统内的细节
基类shape
- (void)draw {
}
子类Rectangle
@interface Rectangle : Shape
@property (nonatomic) CGFloat width;
@property (nonatomic) CGFloat height;
- (void)draw;
子类Circle
@interface Circle : Shape
@property (nonatomic) CGFloat radius;
- (void)draw;
ShapeMaker
+ (void)drawCircleWithParas:(NSDictionary *)paras {
// 绘制了一个圆
Circle *circle = [Circle new];
circle.radius = 10.f; // paras里取
[circle draw];
}
+ (void)drawCircleAndRectangle:(NSDictionary *)paras {
// 绘制了一个圆
Circle *circle = [Circle new];
circle.radius = 10.f; // paras里取
[circle draw];
// 绘制了一个矩形
Rectangle *rectangle = [Rectangle new];
rectangle.width = 10.f; // paras里取
rectangle.height = 20.f; // paras里取
[rectangle draw];
}
ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 绘制一个圆的操作
[ShapeMaker drawCircleWithParas:@{@"a" : @"b"}];
// 绘制圆 + 矩形操作
[ShapeMaker drawCircleAndRectangle:@{@"a" : @"b", @"c" : @"d"}];
}