外观模式:提供一个统一的接口,用来访问子系统内部的一系列接口。
其实简单点说:有一个复杂的系统,它有许多功能依赖与其他的子系统,让这个复杂的系统对外提供统一接口,对子系统的依赖与逻辑操作封装在内部去完成。就是简单的封装而已。
举一个手机的例子,例子来源-Android源码设计模式实践与实战。
定义系统顶层接口:
/** * 手机 * @author PC * */ public interface Moible { /** * 打电话 */ public void call(); /** * 挂电话 */ public void hangOut(); /** * 照相 */ public void takePhoto(); /** * 关闭照相机 */ public void closeCamera(); } 这些功能的完成又依赖与其他的子系统,所以定义这些子系统的接口: /** * 电话功能 * @author PC * */ public interface Phone { /** * 打电话 */ public void call(); /** * 挂电话 */ public void hangOut(); } /** * 照相机 * @author PC * */ public interface Camera { /** * 打开照相机 */ public void open(); /** * 关闭照相机 */ public void close(); /** * 照相 */ public void takePhoto(); } 具体实现类: /** * 华为集成的通信功能 * @author PC * */ public class HuaweiPhone implements Phone{ public void call() { System.out.println("链接华为信号塔打电话..."); } public void hangOut() { System.out.println("断掉信号..."); } } /** * 华为集成的照相模块 * @author PC * */ public class HuaweiCamera implements Camera{ public void open() { System.out.println("调用camera驱动打开摄像头..."); } public void close() { System.out.println("关闭摄像头..."); } public void takePhoto() { System.out.println("照相..."); } }华为手机: /** * 华为手机 * @author PC * */ public class Huawei implements Moible{ private Phone phone = new HuaweiPhone(); private Camera camera = new HuaweiCamera(); public void call() { phone.call(); } public void hangOut() { phone.hangOut(); } public void takePhoto() { camera.open(); camera.takePhoto(); } public void closeCamera() { camera.close(); } }调用端: public class Client { public static void main(String[] args) { Moible huawei = new Huawei(); huawei.call(); huawei.hangOut(); huawei.takePhoto(); huawei.closeCamera(); } } 结果: 链接华为信号塔打电话... 断掉信号... 调用camera驱动打开摄像头... 照相... 关闭摄像头...外观模式总结:对于一个复杂的系统向外提供统一的接口,对内封装其他子系统的复杂逻辑。
