• 【设计模式】外观模式


    一、前言

      分析完适配器模式后,接着看外观模式,外观模式很简单,可以理解为在复杂系统上封装了一层,提供了统一的接口,而让客户端只需要与该接口通信便可控制背后复杂的系统。

    二、外观模式定义

      定义:提供了统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

      从定义可知,外观模式就是对一组接口的封装,提供统一的接口与客户端之间进行通信,从而达到简化使用的目的。

      其类图如下

      说明:对类图的说明如下

      ① Facade类为外观,为复杂的子系统提供了统一的接口,便于操作。

    三、示例

      假设如下场景,当我们睡觉时,多么希望一键就可以关闭电视机,灯泡等电器,而不用起身一个个的关闭,这样的场景可以使用外观模式来完成,从而简化系统的使用。

      3.1 v1.0

      TV  

    package com.hust.grid.leesf.facade;
    
    public class TV {
        public void on() {
            System.out.println("TV on");
        }
        
        public void off() {
            System.out.println("TV off");
        }
    }
    View Code

      Light

    package com.hust.grid.leesf.facade;
    
    public class Light {
        public void on() {
            System.out.println("light is on");
        }
        
        public void off() {
            System.out.println("light off");
        }
    }
    View Code

      Facade

    package com.hust.grid.leesf.facade;
    
    public class Facade {
        private Light light;
        private TV tv;
    
        public Facade(Light light, TV tv) {
            this.light = light;
            this.tv = tv;
        }
        
        public void on() {
            this.light.on();
            this.tv.on();
        }
        
        public void off() {
            this.light.off();
            this.tv.off();
        }
    }
    View Code

      Main(用作测试)

    package com.hust.grid.leesf.facade;
    
    public class Main {
        public static void main(String[] args) {
            Light light = new Light();
            TV tv = new TV();
            Facade facade = new Facade(light, tv);
            facade.off();
        }
    }
    View Code

      运行结果

    light off
    TV off

      说明:使用外观模式,可以很简单的使用整个系统,一键式的就可以完成关闭的操作,有点类似之前分析的命令模式中的宏命令。

    四、总结

      外观模式为复杂系统提供了一个很简单的接口,方便客户使用,同时,也允许客户直接与复杂系统进行通信,外观只是提供了一种额外的选择。所有源代码已经上传至github,欢迎fork,谢谢各位园友的观看~

      

  • 相关阅读:
    requests模块
    Flask框架 之 上下文管理前戏
    Flask框架 之 学生管理分析
    Flask框架 之 路由和视图详解
    数据库连接池DBUtils
    C++中endl和cout语句
    Linux如何在一个文件中写入内容
    C++常量
    Linux重启命令
    Linux命令1
  • 原文地址:https://www.cnblogs.com/leesf456/p/5596710.html
Copyright © 2020-2023  润新知