秒懂设计模式--学习笔记(7)【结构型-门面模式】

embedded/2024/9/23 10:24:46/

目录

      • 6、门面模式
          • 6.1 介绍
          • 6.2 一键操作
          • 6.3 亲自下厨的烦扰
          • 6.4 化繁为简
          • 6.5 整合共享
          • 6.6 门面模式的各角色定义

6、门面模式

6.1 介绍
  • 门面模式(Facade)可能是最简单的结构型设计模式
  • 它能将多个不同的子系统接口封装起来,并对外提供统一的高层接口,使复杂的子系统变得更易使用
  • 无论是“门”还是“面”,指代的都是某系统的外观部分,也就是与外界接触的临界面或接口,所以门面模式常常也被翻译为“外观模式”
  • 测试类文件
    门面模式测试类文件
6.2 一键操作
  • 如相机使用对焦、调节闪光灯、调光圈等
  • 对庞大复杂的子系统进行了二次封装,把原本复杂的操作接口全都隐藏起来,并在内部加入逻辑
  • 最终只为外界提供一个简单方便的快门按键,让用户能够“一键操作”
6.3 亲自下厨的烦扰
  • 门面模式,那么以“商铺门面”的例子进行代码实战
  • 亲自下厨需要买菜、洗菜、切菜,然后进行蒸、煮、炒、炸等烹饪过程,最后清理碗筷等
  • 将步骤简化为以下3步,首先小明找菜贩买菜,然后找妹妹做菜,最后亲自洗碗
    • 第1步: 定义蔬菜商类
    • 第2步: 让妹妹作为厨房小能手类
    • 第3步: 最后小明作为客户端类进行全局操控并
package facade.base;/*** 蔬菜商类**/
public class VegVendor {public void purchase() {System.out.println("供应蔬菜……");}
}
package facade.base;/*** 厨房小能手类**/
public class Helper {public void cook() {System.out.println("做饭……");}
}
package facade.base;/*** 客户端测试类**/
public class Client {public static void main(String[] args) {// 找商贩买菜VegVendor vegVendor = new VegVendor();vegVendor.purchase();// 找妹妹做饭Helper helper = new Helper();helper.cook();// 吃饭Client client = new Client();client.eat();// 洗碗client.wash();}public void eat() {System.out.println("开始吃饭......");}public void wash() {System.out.println("洗碗.......");}
}
  • 一系列复杂的操作过程并不像我们想象的那么简单
  • 不但惊扰四方,还要自己亲自擦桌洗碗,但无论换作谁都要经历这一番操作
6.4 化繁为简
  • 门店(饭店)为了达到高效、便捷的目的,门店会统一对子系统进行整合与调度,至于它对蔬菜商、厨师或服务员等子系统是如何操作的,用户都不必了解
  • 子系统
package facade.facade.entity;/***  蔬菜商类**/
public class VegVendor {public void purchase() {System.out.println("供应蔬菜……");}
}
package facade.facade.entity;/*** 厨师**/
public class Chef {public void cook() {System.out.println("厨师做饭......");}
}
package facade.facade.entity;/*** 服务员**/
public class Waiter {public void order() {System.out.println("接待,入座,点菜......");}public void serve() {System.out.println("服务员上菜......");}
}
package facade.facade.entity;/***  清洁洗碗工**/
public class Cleaner {public void clean(){System.out.println("清洁收拾桌子......");}public void wash() {System.out.println("清洁洗碗......");}
}
  • 外观门面类Facade:
    • 内部封装了大量的子系统资源, 如蔬菜商、厨师、服务员、洗碗工
    • 构造方法中依次对各个子系统进行了初始化操作
    • 点菜方法order()中进行依次调度
package facade.facade;import facade.base.VegVendor;
import facade.facade.entity.Chef;
import facade.facade.entity.Cleaner;
import facade.facade.entity.Waiter;/*** 外观门面类: 内部封装了大量的子系统资源**/
public class Facade {private VegVendor vegVendor;private Chef chef;private Waiter wait;private Cleaner clean;public Facade() {this.vegVendor = new VegVendor();// 开门前就找蔬菜商准备好蔬菜vegVendor.purchase();// 雇佣厨师this.chef = new Chef();// 雇佣服务员this.wait = new Waiter();// 雇佣清洁工、洗碗工等this.clean = new Cleaner();}public void order(){// 接待,入座,点菜wait.order();// 找厨师做饭chef.cook();// 上菜wait.serve();// 收拾桌子,洗碗,以及其他操作clean.clean();clean.wash();}
}
  • 用户要做的只是登门访问,调用其order()方法即可享受现成可口的饭菜了,操作变得简单而优雅。
6.5 整合共享
  • 软件模块应该只专注于各自擅长的领域,合理明确的分工模式才能更好地整合与共享资源
  • 外观门面类对子系统的整合与共享极大地保证了用户访问的便利性
6.6 门面模式的各角色定义
  • Facade(外观门面):封装了多个子系统,并将它们整合起来对外提供统一的访问接口
  • SubSystemA、SubSystemB(子系统A、子系统B…):隐藏于门面中的子系统,数量任意,且对外部不可见,专注于各自擅长的领域。如:蔬菜商类、厨师类、服务员类等
  • Client(客户端):门面系统的使用方,只访问门面提供的接口。
  • 门面充当了包装类的角色,对子系统进行整合,再对外暴露统一接口,使其结构内繁外简,最终达到资源共享、简化操作的目的
  • 从另一方面讲,门面模式也降低了客户端与子系统之间的依赖度,高内聚才能低耦合。

http://www.ppmy.cn/embedded/57046.html

相关文章

【解决方案】笔记本电脑屏幕亮度调节失效(Dell G15 5510 使用Fn调节)

目前解决方案:使用驱动总裁(其他的驱动安装软件应该也可以,个人觉得这个好用),更新显卡驱动即可。如图所示本人更新了Intel UHD Graphics核显驱动,功能回复正常。 使用Fn快捷键调节亮度如图所示&#xff0…

众所周知沃尔玛1P是怎么运营?

​​沃尔玛的1P模式,即第一方供应商模式,是其独特的采购策略。在这种模式下,供应商先将商品卖给沃尔玛,由沃尔玛负责库存管理和销售。沃尔玛通过强大的采购和物流能力控制库存,确保商品品质,为客户提供更加…

LeetCode:3115. 质数的最大距离(Java 筛质数)

目录 3115. 质数的最大距离 题目描述: 实现代码与解析: 筛质数 原理思路: 3115. 质数的最大距离 题目描述: 给你一个整数数组 nums。 返回两个(不一定不同的)质数在 nums 中 下标 的 最大距离。 示…

6、Redis系统-数据结构-05-整数

五、整数集合(Intset) 整数集合是 Redis 中 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不大时,就会使用整数集合这个数据结构作为底层实现。整数集合通过紧凑的内存布局和升级机制,实现了…

网络安全概述

一、影响信息安全的隐患(脆弱性) 1、先天不足 1)网络协议有缺陷 网络应用层的安全隐患IP层通信的欺骗性(假冒身份)局域网中以太网协议的数据传输机制是广播发送, 使得系统和网络具有易被监视性(监听账号和密码) 2)系统软件有缺陷 操作系统有漏…

Python 插入、替换、提取、或删除Excel中的图片

Excel是主要用于处理表格和数据的工具,我们也能在其中插入、编辑或管理图片,为工作表增添视觉效果,提升报告的吸引力。本文将详细介绍如何使用Python操作Excel中的图片,包含以下4个基础示例: 文章目录 Python 在Excel…

定制化的 CSS 魔法:WebKit 处理 CSS 变量的深度解析

定制化的 CSS 魔法:WebKit 处理 CSS 变量的深度解析 CSS 变量,也称为自定义属性,为开发者提供了一种强大的方法来管理样式表中的值。它们允许开发者定义可重用的属性值,然后在样式表中多次引用这些值。WebKit,作为支持…

姜镇主任科普:号称“大脑杀手”的脑胶质瘤是一种什么样的肿瘤?

面对诸如头痛、频繁呕吐、记忆力显著减退等“轻微症状”,许多人往往掉以轻心,将其归咎于日常压力或不良作息习惯所致,殊不知这样的忽视可能正是身体发出的警示信号,隐藏着脑胶质瘤这一严重疾病的潜在风险。这些看似不起眼的症状&a…