外观模式
外观模式体现的就是java
的封装思想。将多个子系统封装起来,提供一个更简洁的接口供外部使用。
说明
外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又成为门面模式。
举例
每天上班的时候,我们必做三件事:
1.打开IDEA
2.打开浏览器
3.打开微信
下班的时候,又做三件事:
1.关闭IDEA
2.关闭浏览器
3.关闭微信
使用代码演示:
/** * @Author: mahy * @Contact: [email protected] * @Date: 2022-03-08 14:26 * @Description: 浏览器类 */ public class Browser { public static void open(){ System.out.println("打开浏览器"); } public static void close(){ System.out.println("关闭浏览器"); } }
/** * @Author: mahy * @Contact: [email protected] * @Date: 2022-03-08 14:27 * @Description: 微信类 */ public class WeChat { public static void open(){ System.out.println("打开微信"); } public static void close(){ System.out.println("关闭微信"); } }
/** * @Author: mahy * @Contact: [email protected] * @Date: 2022-03-08 14:27 * @Description: IDEA类 */ public class Idea { public static void open(){ System.out.println("打开IDEA"); } public static void close(){ System.out.println("关闭IDEA"); } }
测试调用
/** * @Author: mahy * @Contact: [email protected] * @Date: 2022-03-07 14:02 * @Description: 在这儿描述 */ public class Test001 { public static void main(String[] args) { System.out.println("上班...."); Browser.open(); WeChat.open(); Idea.open(); System.out.println("下班..."); Browser.close(); WeChat.close(); Idea.close(); } }
但是我们每天都要做这几件事,所以我们可以使用外观模式,将这几个子系统封装起来,提供更简洁的接口,如下:
/** * @Author: mahy * @Contact: [email protected] * @Date: 2022-03-08 14:35 * @Description: 将子系统封装起来,集体调用 */ public class Global { public static void open(){ Browser.open(); WeChat.open(); Idea.open(); } public static void close(){ Browser.close(); WeChat.close(); Idea.close(); } }
/** * @Author: mahy * @Contact: [email protected] * @Date: 2022-03-07 14:02 * @Description: 客户端调用 */ public class Test001 { public static void main(String[] args) { System.out.println("上班...."); Global.open(); System.out.println("下班..."); Global.close(); } }
运行程序,输出与之前一样。
外观模式就是这么简单,它使得两种不同的类不用直接交互,而是通过一个中间件——也就是外观类——间接交互。外观类中只需要暴露简洁的接口,隐藏内部的细节,所以说白了就是封装的思想。
外观模式非常常用,(当然了!写代码哪有不封装的!)尤其是在第三方库的设计中,我们应该提供尽量简洁的接口供别人调用。另外,在MVC
架构中,C 层(Controller)就可以看作是外观类,Model 和 View 层通过 Controller 交互,减少了耦合。