美文网首页技术干货程序员
设计模式——外观模式

设计模式——外观模式

作者: BrightLoong | 来源:发表于2018-08-26 21:15 被阅读3次
facde
阅读原文请访问我的博客BrightLoong's Blog

一. 概述

外观模式(Facade),为系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式通过向现有的系统添加一个接口,来隐藏系统的复杂性,用一个一致的界面来面向客户端。

外观模式是结构型设计模式。

其实外观模式在我们平时的开发中有意识或者是无意识的都有使用;比如WEB开发中我们会经常定义一个控制层(Controller),一个业务层(Service),一般来说业务层对控制层接收到的请求提供一个统一的接口来进行统一的处理,在业务层去实现各种不同的逻辑,这里的业务层就相当于一个外观类,它对客户端控制层来说屏蔽了复杂的实现。

二. UML类图

facde
  • Facade:外观类,知道哪些子系统负责处理请求,将客户端请求代理给适当的子系统对象。
  • SubSystem:子系统,实现子系统功能,处理Facade对象指派的任务。

三. 源码实现

子系统1——SystemOne

package io.github.brightloong.lab.design.facade;

/**
 * @author: BrightLoong
 * @date: 2018/8/26 20:46
 * @description:
 */
public class SystemOne {
    public void start() {
        System.out.println("SystemOne start");
    }

    public void shutdown() {
        System.out.println("SystemOne shutdown");
    }
}

子系统2——SystemTwo

package io.github.brightloong.lab.design.facade;

/**
 * @author: BrightLoong
 * @date: 2018/8/26 20:46
 * @description:
 */
public class SystemTwo {
    public void start() {
        System.out.println("SystemTwo start");
    }

    public void shutdown() {
        System.out.println("SystemTwo shutdown");
    }
}

外观类——Facde

package io.github.brightloong.lab.design.facade;

/**
 * @author: BrightLoong
 * @date: 2018/8/26 20:46
 * @description:
 */
public class Facde {
    private SystemOne systemOne;

    private SystemTwo systemTwo;

    public Facde(SystemOne systemOne, SystemTwo systemTwo) {
        this.systemOne = systemOne;
        this.systemTwo = systemTwo;
    }

    public void systemStart() {
        systemOne.start();
        systemTwo.start();
        System.out.println("System start");
    }

    public void systemShutdown() {
        systemOne.shutdown();
        systemTwo.shutdown();
        System.out.println("System shutdown");
    }
}

客户端调用和输出

package io.github.brightloong.lab.design.facade;

/**
 * @author: BrightLoong
 * @date: 2018/8/26 20:46
 * @description:
 */
public class Facde {
    private SystemOne systemOne;

    private SystemTwo systemTwo;

    public Facde(SystemOne systemOne, SystemTwo systemTwo) {
        this.systemOne = systemOne;
        this.systemTwo = systemTwo;
    }

    public void systemStart() {
        systemOne.start();
        systemTwo.start();
        System.out.println("System start");
    }

    public void systemShutdown() {
        systemOne.shutdown();
        systemTwo.shutdown();
        System.out.println("System shutdown");
    }
}

输出结果如下:

SystemOne start
SystemTwo start
System start
========================
SystemOne shutdown
SystemTwo shutdown
System shutdown

四. 总结

使用场景

  • 为复杂的模块或子系统提供外界访问的模块
  • 子系统相互独立

优点

  • 松耦合
  • 更高的灵活性
  • 对于一些客户端来说,提供了安全性,因为封装了复杂的实现,而提供一个统一的接口,客户端不用关心内部的实现。

缺点

  • 违背了开闭原则。

相关文章

  • Android设计模式——外观模式(七大结构型)

    1.外观模式介绍 外观模式(Facade Pattern),是七大结构型设计模式之一。 外观模式运...

  • 设计模式[9]-外观模式-Facade Pattern

    1. 外观模式 外观模式(Facade Pattern),又称为门面模式,是非常常用的结构性设计模式。外观模式使得...

  • java设计模式-外观模式(Facade)

    外观模式,属于结构性模式。属于设计模式里面比较简单的设计模式,本人认为是最简单的设计模式。 所谓外观,就是我们能看...

  • 了解外观模式

    java 设计模式 ------外观模式 Java中一共有23种设计模式,每种设计模式各有特...

  • 设计模式之-4.外观模式

    每看一次设计模式,感觉每一个设计模式看起来是那么简单,对于外观模式我的理解就是外观模式:外观模式,这个名字起得不怎...

  • 设计模式详解——外观模式

    本篇文章介绍一种设计模式——外观模式。本篇文章内容参考《JAVA与模式》之门面模式,外观模式,深入浅出外观模式(二...

  • 外观模式(Facede)

    本文参考自: 《JAVA设计模式》之外观模式(Facade) 1. 作用 外观模式也叫门面模式,门面模式是对象的结...

  • 设计模式---外观模式

    1、外观模式(Facade):也叫门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个...

  • 设计模式——外观模式

    阎宏博士的《JAVA与模式》一书中开头是这样描述外观(Facade)模式的:门面模式是对象的结构模式,外部与一个子...

  • 设计模式--外观模式

    一、举个栗子小明每天回家都会先打开灯,空气净化器,电热水器烧上水,放上音乐,如果天气热的话,再打开空调。写成代码 ...

网友评论

    本文标题:设计模式——外观模式

    本文链接:https://www.haomeiwen.com/subject/nqkaiftx.html