当前位置: 首页 > news >正文

设计模式-外观(门面)模式(结构型)

外观模式

外观模式又称门面模式(结构型模式),它是一个可以屏蔽系统复杂性的设计模式。俗话说没有什么问题是加一层“介质”解决不了的,如果有那就在加一层。在开发过程中肯定封装过Utils类,我认为这就是一种门面模式;与之类似的还有一种模式叫中介者模式(又叫调停者模式),它是用于解决”内部问题"的,即系统内多个类直接问题的;

角色

  1. 门面类:提供一些接口,封装系统的复杂性,客户端可以通过与门面类对象的交互,而无需直接与系统的各个组件打交道。
  2. 子系统:多个相互关联的类组成,负责具体的功能,外观对象通过调用子系统的来完成客户端请求。
  3. 客户端:直接与门面类交互,不需要了解子系统内部具体实现。

图解

请添加图片描述

实现

子系统:

涉及到A、B、C三个类,都实现Base抽象类

public interface Base {String test();
}
public class A implements Base{@Overridepublic String test() {return "A";}
}
public class B implements Base{@Overridepublic String test() {return "B";}
}
public class C implements Base{@Overridepublic String test() {return "C";}
}

门面类:

定义子系统内部所有类的引用,并封装其方法

public class Facade {private A a;private B b;private C c;public Facade() {this.a = new A();this.b = new B();this.c = new C();}public void funA(){System.out.println(a.test());}public void funAB(){System.out.println(a.test()+b.test());}public void funABC(){System.out.println(a.test()+b.test()+c.test());}
}

客户端:

创建门面对象,调用子系统内部接口

public class Client {public static void main(String[] args) {Facade facade = new Facade();facade.funA();}
}

相关文章:

  • [python]yfinance国内不能使用
  • 【数据分享】《中国文化文物与旅游统计年鉴》2022
  • ON DUPLICATE KEY UPDATE 子句
  • 短视频直播教学课程小程序的作用是什么
  • Android应用图标到应用显示过程
  • 【大模型】个人对大模型选择的见解
  • 关于Redis中事务
  • 超详解——深入详解Python基础语法——基础篇
  • 【考研数据结构——C语言描述】第二章 线性表链式存储结构上的基本操作——单链表的插入
  • java生成pdf通过接口下载
  • 【lesson8】云备份服务端完整版代码
  • 【设计模式】观察者模式(行为型)⭐⭐⭐
  • 阿里云一键登录号码认证服务
  • 嵌入式C语言编码规范要点
  • QT中为程序加入超级管理员权限
  • 【译】JS基础算法脚本:字符串结尾
  • Debian下无root权限使用Python访问Oracle
  • JavaScript创建对象的四种方式
  • Java到底能干嘛?
  • JS变量作用域
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Python - 闭包Closure
  • Web标准制定过程
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 关于List、List?、ListObject的区别
  • 好的网址,关于.net 4.0 ,vs 2010
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 算法-图和图算法
  • 一个JAVA程序员成长之路分享
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 源码安装memcached和php memcache扩展
  • mysql面试题分组并合并列
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 通过调用文摘列表API获取文摘
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #AngularJS#$sce.trustAsResourceUrl
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (ros//EnvironmentVariables)ros环境变量
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (差分)胡桃爱原石
  • (第30天)二叉树阶段总结
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (九十四)函数和二维数组
  • (力扣)循环队列的实现与详解(C语言)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十)c52学习之旅-定时器实验
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)基于IDEA的JAVA基础10