首页 > 其他分享 >初识设计模式 - 外观模式

初识设计模式 - 外观模式

时间:2022-10-09 09:13:02浏览次数:49  
标签:外观 模式 子系统 初识 接口 设计模式 public 客户端

简介

外观设计模式(Facade Design Pattern)又被叫作门面模式,其描述是,通过为多个复杂的子系统提供统一的接口,使得子系统更容易被使用。

在现实生活中,常常存在办事复杂的情况,如办理房产证或者注册公司,有时需要跑几个部门才能办成,如果这些部门都在一个地方,或者是成立一个综合部门就方便很多。

对于上述例子,成立综合部分就相当于使用外观模式,为客户端提供统一的接口,从而降低的系统的耦合度、降低客户端的使用难度。

具体实现

创建一个抽象的图形接口,定义一个画图的行为:

public interface Shape {
    void draw();
}

实现一个画圆形的具体类:

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("在这里画圆形!");
    }
}

定义一个画正方形的具体类:

public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("在这里画正方形!");
    }
}

随着具体类越来越多,客户端调用这些类也变得更多,则耦合度变得越来越高。这时就可以通过外观模式将这些具体类汇总到同一个接口中,客户端只需掌握这个外观类即可。

定义一个图形类的外观类,将具体类都注入到其中:

public class ShapeFacade {
    private final Shape circle = new Circle();  
    private final Shape square = new Square();

    public void drawCircle() {
        circle.draw();
    }

    public void drawSquare() {
        square.draw();
    }
}

总结

优点

外观模式的主要优点如下:

  • 降低了子系统与客户端的耦合度,使得子系统的变化不会影响调用它的客户端
  • 对客户端屏蔽了子系统组件,减少了客户处理的对象数目,使得子系统使用起来更加简便
  • 只是提供了一个访问子系统的统一入口,并不影响客户端直接使用子系统类

缺点

外观模式的主要缺点如下:

  • 不能很好地限制客户端使用子系统类,很容易带来未知风险
  • 增加新的子系统类可能需要修改外观类或者客户端的代码,违背了开闭原则

适用场景

外观模式的适用场景如下:

  • 解决易用性问题,当需要访问一系列复杂的子系统时,外观模式可以为客户端提供简单的入口
  • 解决性能问题,调用多个接口改成调用一个统一接口,可以减少网络通信成本
  • 解决分布式事务问题,对于不同模块还需要保持事务性,则可以设计一个包括两个操作的新接口在同一个事务里执行

源码

外观模式是一种使用频率非常高的设计模式,如 JDK 中的 java.util.logging.LogManager 简单地使用了外观模式,其中统一了 SystemLoggerContextLoggerContext 这两个内部类。

标签:外观,模式,子系统,初识,接口,设计模式,public,客户端
From: https://www.cnblogs.com/fatedeity/p/16770939.html

相关文章

  • 设计模式-策略模式
    策略模式,替换掉屎一样的if-else语句。好,那我们来在这里看一下啊,就是整个,这个策略模式呢,它的英文叫做strategy,然后,就给出一个场景吧,还是,这个场景其实也很简单,就是说是,我们可......
  • 设计模式-组合模式
    对层级数据递归调用执行操作。先说一下这个组合模式是composite,然后说一个场景,这个模式然后按照一个什么场景来做呢,举个例子,有一颗部门树,然后父部门有这个子部门,然后又有子......
  • Bash初识
    目录Bash初识什么是BashBash的作用如何使用Bash命令提示符Bash特性基础语法命令补全bash快捷键历史命令命令的别名linux系统中帮助Bash初识什么是BashBash是linux的命令......
  • C语言 初识C语言04
    常量C语言中的常量分为以下几种:1、字面常量:直观写出来的值intmain(){3;//字面常量3=5;//error,常量的值不能被改变return0;}2、const修饰的常变量#include<stdio.h>intm......
  • 08-Go设计模式-外观模式
    外观模式示例代码/*外观模式根据迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。Facade模式也叫外观模式,是由GoF提出的23种设计模式......
  • 07-Go设计模式-适配模式
    适配模式示例代码/*适配器模式:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式中的角色和......
  • 实践GoF的设计模式:访问者模式
    摘要:访问者模式的目的是,解耦数据结构和算法,使得系统能够在不改变现有代码结构的基础上,为对象新增一种新的操作。本文分享自华为云社区《【Go实现】实践GoF的23种设计模式:......
  • Java设计模式 —— 桥接模式
    8桥接模式8.1桥接模式概述BridgePattern:将抽象部分与它的实现部分解耦,使得两者都能够独立变化。桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独......
  • 设计模式-命令模式
    给其他模块下达命令,好,这个命令模式啊,就是说是,也不说它的一个场景了,先讲它的这个模式它实现的,这么一个,整个模式实现的方式,这个模式的代码结构大概是怎么样的,然后我再讲一下......
  • 浅谈前端常用设计模式之一:策略模式
    前言2022年,前端技术依旧日新月异,各种新兴技术或业务解决方案层出不穷。但我始终认为,在变与不变之间,唯有经典永恒,设计模式就是经典之一。在笔者从业期间,见过很多不同人写......