(十一)结构型模式-外观模式

itmahy
itmahy
发布于 2024-01-19 / 30 阅读
0
0

(十一)结构型模式-外观模式

外观模式

外观模式体现的就是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 交互,减少了耦合。


评论