背景
有一个家庭影院,有DVD播放器,投影仪,屏幕,音响,爆米花机,每一个设备都有一个遥控器。
传统思路:
创建一个客户端类,在这个类中创建所有设备的相关对象(遥控器),在这个类中操作所有设别
问题:
在一个类中调用所有方法,调用过程混乱。
思路:
通过一个一致的界面类接口,实现各个设备的相关功能。
基本介绍
为子系统的一组接口提供一个一致的界面,定义一个高级接口使得其他子系统更加容易使用
通过定义一个一致的接口,屏蔽子系统中的接口细节,便于外界调用。
两个角色
①外观类:高级方法类,聚合了所有子系统
②子系统的集合:处理外观类指派的任务,是功能的实际提供者
外观类提供统一的调用接口,使用者只需要通过外观类控制子系统。
具体实现
分别创建DVD播放器,投影仪,屏幕,音响,爆米花机类,在类中实现他们自身功能。
创建一个统一遥控器类(外观类),在类中声明所有设备的对象,根据影院的业务逻辑设计外观类的方法:如Ready()方法(打开DVD,投影仪,屏幕,音响,爆爆米花),播放方法(打开DVD)。
总结:
业务逻辑需要调用一系列繁琐的小方法。我们根据业务逻辑将小方法分类放入几个大方法中调用,(其中可能会涉及到子系统之间的互相调用)在客户端,只需要调用这几个大方法就行。
关键在于如何将业务逻辑总结为几个大步骤,在外观类中把子系统的方法,归类到几个大步骤中,使得客户端的调用更加清晰明了。