Cowboy Tech

iOS设计模式-外观

外观模式解决的问题

如果在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];

外观模式

  1. 用一个类将复杂的子系统隔离开来解耦合
  2. 如果在同一文件内就是封装,用不同的文件来隔离就是外观模式。
  3. 主系统只考虑输入什么参数,不必考虑系统内的细节

基类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"}];
}