0%

设计模式之结构型模式(五):外观模式

1. 外观模式概述

  • 概念

    • 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式
    • 外观模式体现的就是 Java 中的封装思想。将多个子系统封装起来,提供一个更简洁的接口供外部调用
  • 特点

    • 外观模式非常简单,外观模式使得两种不同的类不用直接交互,而是通过一个中间件,也就是外观类间接交互。外观类中只需要暴露简洁的接口,隐藏内部的细节,所以说白了就是封装的思想,封装起来的类就是外观类

    • 外观模式非常常用(写代码当然需要封装),尤其是在第三方库的设计中,应该提供尽量简洁的接口供外部调用。另外,在 MVC 架构中,C 层 Controller 就可以看作是外观类,Model 和 View 层通过 Controller 交互,减少了耦合

      外观模式

  • Demo

    • 新建浏览器类

      1
      2
      3
      4
      5
      6
      7
      8
      9
      public class Browser {
      public static void open() {
      System.out.println("打开浏览器");
      }

      public static void close() {
      System.out.println("关闭浏览器");
      }
      }
    • 新建 IDE 类

      1
      2
      3
      4
      5
      6
      7
      8
      9
      public class IDE {
      public static void open() {
      System.out.println("打开 IDE");
      }

      public static void close() {
      System.out.println("关闭 IDE");
      }
      }
    • 新建微信类

      1
      2
      3
      4
      5
      6
      7
      8
      9
      public class Wechat {
      public static void open() {
      System.out.println("打开微信");
      }

      public static void close() {
      System.out.println("关闭微信");
      }
      }
    • 客户端调用

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      public class Client {
      @Test
      public void test() {
      System.out.println("上班:");
      Browser.open();
      IDE.open();
      Wechat.open();

      System.out.println("下班:");
      Browser.close();
      IDE.close();
      Wechat.close();
      }
      }
    • 运行程序,输出如下

      1
      2
      3
      4
      5
      6
      7
      8
      上班:
      打开浏览器
      打开 IDE
      打开微信
      下班:
      关闭浏览器
      关闭 IDE
      关闭微信
    • 外观模式:因为每天都有做着几件事,可以将这几个子系统封装起来,提供更简洁的接口

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      public class Facade {
      public void open() {
      Browser.open();
      IDE.open();
      Wechat.open();
      }

      public void close() {
      Browser.close();
      IDE.close();
      Wechat.close();
      }
      }
    • 客户端可以简化代码,只和这个外观类打交道

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      public class Client {
      @Test
      public void test() {
      Facade facade = new Facade();
      System.out.println("上班:");
      facade.open();

      System.out.println("下班:");
      facade.close();
      }
      }
-------------------- 本文结束感谢您的阅读 --------------------