外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
在以下情况下可以考虑使用外观模式:
(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
有点:
(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
简单代码示例:
新建一个Group包含`Shape.h / Shape.m / RectShape.h / RectShape.m / CircleShape.h / CircleShape.m
Shape.h
1 #import <Foundation/Foundation.h> 2 3 @interface Shape : NSObject 4 5 - (void)draw; 6 7 @end
RectShape.h
1 #import "Shape.h" 2 3 @interface RectShape : Shape 4 5 - (void)draw; 6 7 @end
CircleShape.h
1 #import "Shape.h" 2 3 @interface RectShape : Shape 4 5 - (void)draw; 6 7 @end
再创建一个DrawShape.h / DrawShape.m作为Controller使用
1 #import <Foundation/Foundation.h> 2 #import "RectShape.h" 3 #import "CircleShape.h" 4 5 @interface DrawShape : NSObject 6 7 + (void)drawRectShape; 8 + (void)drawCircleShape; 9 10 @end
Controller中使用
1 #import "ViewController.h" 2 #import "DrawShape.h" 3 4 @interface ViewController () 5 6 @end 7 8 @implementation ViewController 9 10 - (void)viewDidLoad { 11 [super viewDidLoad]; 12 13 //调用画画接口 14 [DrawShape drawRectShape]; 15 [DrawShape drawCircleShape]; 16 17 } 18 19 20 @end