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

外观模式详解

以下是一个结合外观模式解决实际开发问题的Java实现案例,涵盖复杂系统整合、接口简化、版本兼容等场景需求,附带逐行中文注释:

场景描述

开发一个智能家居控制系统,需整合多个子系统:
灯光系统:多房间灯光控制
空调系统:温度模式调节
影音系统:多媒体设备管理
安防系统:门窗传感器监控

核心痛点:
客户端需要了解每个子系统接口
多设备联动操作复杂(如"离家模式"需关闭所有设备并启动安防)
子系统升级导致客户端频繁修改

完整代码实现(逐行注释)

import java.util.List;// ================== 子系统类 ==================/*** 灯光子系统*/
class LightingSystem {public void switchRoomLight(String room, boolean on) {System.out.println((on ? "开启" : "关闭") + room + "灯光");}public void setBrightness(String room, int percent) {System.out.println("设置" + room + "灯光亮度至" + percent + "%");}
}/*** 空调子系统*/
class AirConditioningSystem {public void setTemperature(float temp) {System.out.println("设置空调温度:" + temp + "℃");}public void setMode(String mode) {System.out.println("设置空调模式:" + mode);}
}/*** 影音子系统*/
class EntertainmentSystem {public void playMusic(String song) {System.out.println("播放音乐:" + song);}public void stopMusic() {System.out.println("停止音乐播放");}public void startMovieMode() {System.out.println("启动影院模式");}
}/*** 安防子系统(新版本接口)*/
class SecuritySystem {public void armSystem() {System.out.println("启动全屋安防系统");}public void disarmSystem() {System.out.println("关闭安防系统");}public List<String> getSensorStatus() {return List.of("前门:正常", "后窗:正常");}
}// ================== 外观类 ==================/*** 智能家居外观(核心整合类)*/
class SmartHomeFacade {// 子系统实例(可替换为接口实现依赖注入)private final LightingSystem lighting;private final AirConditioningSystem ac;private final EntertainmentSystem entertainment;private final SecuritySystem security;public SmartHomeFacade() {this.lighting = new LightingSystem();this.ac = new AirConditioningSystem();this.entertainment = new EntertainmentSystem();this.security = new SecuritySystem();}// ------------------- 场景模式 -------------------/*** 离家模式(解耦新旧系统差异)*/public void leaveHome() {System.out.println("\n=== 启动离家模式 ===");lighting.switchRoomLight("客厅", false);lighting.switchRoomLight("卧室", false);ac.setMode("节能");entertainment.stopMusic();security.armSystem();checkSecurityStatus();}/*** 回家模式*/public void backHome() {System.out.println("\n=== 启动回家模式 ===");security.disarmSystem();lighting.switchRoomLight("玄关", true);lighting.setBrightness("客厅", 70);ac.setTemperature(25.5f);entertainment.playMusic("欢迎回家");}/*** 影院模式*/public void startMovieNight() {System.out.println("\n=== 启动影院模式 ===");lighting.switchRoomLight("客厅", true);lighting.setBrightness("客厅", 20);ac.setTemperature(24.0f);ac.setMode("静音");entertainment.startMovieMode();}// ------------------- 工具方法 -------------------private void checkSecurityStatus() {List<String> status = security.getSensorStatus();System.out.println("安防状态检查:");status.forEach(System.out::println);}// ------------------- 适配旧版接口(解决版本兼容问题) -------------------/*** 旧版空调接口适配方法* @param level 1-低温 2-中温 3-高温*/public void legacySetACLevel(int level) {float[] temps = {20.0f, 24.0f, 28.0f};ac.setTemperature(temps[level - 1]);}
}// ================== 客户端代码 ==================
public class FacadePatternDemo {public static void main(String[] args) {SmartHomeFacade smartHome = new SmartHomeFacade();// 场景模式调用smartHome.backHome();  // 回家模式smartHome.startMovieNight();  // 影院模式smartHome.leaveHome();  // 离家模式// 兼容旧版接口调用System.out.println("\n=== 旧版空调设置 ===");smartHome.legacySetACLevel(2);  // 中温}
}

架构设计建议

分层实现

┌───────────────┐
│   客户端代码    │
└──────┬────────┘│
┌──────▼────────┐
│ 外观层(Facade) │
└──────┬────────┘│
┌──────▼────────┐
│ 子系统层(Subsystems)│
└──────────────────┘

接口设计原则
最少知识原则:外观方法不应暴露不需要的子系统细节
稳定性原则:外观接口应比子系统接口更稳定
正交性原则:不同场景方法之间保持功能独立

演进策略
初期为简单外观
随系统复杂化发展为门面集群
最终可能形成层次化外观体系
通过这个案例可以看出,外观模式在复杂系统整合和接口简化场景中具有重要价值。实际开发中建议:
识别稳定点:外观接口应封装最稳定的业务概念
控制粒度:避免外观类成为"上帝对象"
结合其他模式:如工厂模式创建外观实例
版本管理:为重大升级维护多版本外观类

一句话总结

门面模式主要是为了解决对外暴露接口的细节问题,通过门面的方式隐藏细节。与适配器模式不同的是,适配器模式主要是当前子系统对外部调用接口进行适配,而门面模式是内部接口开给外部的细节隐藏。门面模式是帮别人适配,适配器模式是我适配别人。

相关文章:

外观模式详解

以下是一个结合外观模式解决实际开发问题的Java实现案例&#xff0c;涵盖复杂系统整合、接口简化、版本兼容等场景需求&#xff0c;附带逐行中文注释&#xff1a; 场景描述 开发一个智能家居控制系统&#xff0c;需整合多个子系统&#xff1a; 灯光系统&#xff1a;多房间灯光…...

JavaScript单例模式

单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 用一个变量来标志是否创建过对象&#xff0c;如果是&#xff0c;则在下次直接返回这个已经创建好的对象&#xff0c;示例代码如下&#xff1a; 单例模式的核心思想是让指定的类只存在唯一一个实例&…...

Kong网关研究

目录 概述 部署kong docker服务 kong初始化与启动 验证 部署konga 网关功能 JWT认证 若依的鉴权认证 kong的JWT支持 限流 黑名单 概述 Kong网关基于OpenResty&#xff0c;而OpenResty基于Nginx&#xff0c;Nginx本身是性能强大的方向代理与web容器&#xff0c;Ope…...

LangChain 结构化输出:用 Pydantic + PydanticOutputParser 驯服 LLM 的“自由发挥”

目录 一、Pydantic 二、PydanticOutputParser 1、为什么需要 PydanticOutputParser&#xff1f; 2、Pydantic和PydanticOutputParser核心区别 3、Pydantic的不足 &#xff08;1&#xff09;无法直接解析非结构化文本 &#xff08;2&#xff09;缺乏对 LLM 输出的适配性 …...

source(WEB)

##解题思路 首先打开kali&#xff0c;使用dirsearch扫描下网站目录&#xff0c;发现网站有.git源码泄露 dirsearch -u URL 接着使用wget将源码下载到本地&#xff08;尝试过使用githack&#xff0c;但是得到的信息是flag不在这&#xff09; wget -r URL/.git/ 接着cd到wget的…...

【蓝桥杯】单片机设计与开发,温度传感器DS18B20

一、温度传感器概述 结构图 二、通信过程 三、onewire单总线协议概述 四、单总线的工作原理 黑粗线是单片机发送的&#xff0c;浅的是s18b20回应的 五、温度传感器的应用 六、onewire 七、课后习题...

trae.ai 编辑器:前端开发者的智能效率革命

一、为什么我们需要更智能的编辑器&#xff1f; 作为从业5年的前端开发者&#xff0c;我使用过从Sublime到VSCode的各种编辑器。但随着现代前端技术的复杂度爆炸式增长&#xff08;想想一个React组件可能涉及JSX、CSS-in-JS、TypeScript和GraphQL&#xff09;&#xff0c;传统…...

【FPGA实战】基于DE2-115实现数字秒表

【FPGA实战】基于DE2-115实现数字秒表 一、项目概述二、层次化设计架构三、核心模块实现原理1. 时钟分频模块(clock_divider.v)2. 按键处理模块2.1 消抖(debounce .v)2.2 边沿检测(edge_detector .v) 3. 时间计数模块(time_counter .v)4. 显示驱动模块(seven_seg_display.v)5.顶…...

动态规划入门:从记忆化搜索到递推

本篇笔记基于b站灵茶山艾府。 198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统…...

Linux 入门:基础开发工具(上)vim,gcc/g++,make/makefile

目录 一.软件包管理器 一&#xff09;.软件包 二&#xff09;.安装软件 三&#xff09;.删除软件 二.编辑器vim 一&#xff09;.vim的基本介绍 1.正常/普通/命令模式(Normal mode) 2.插入模式(Insert mode) 3.底行模式(last line mode) 二&#xff09;.vim的基本操作 …...

golang 的channel

理解 Go 语言的 Channel Channel 是 Go 语言中用于 goroutine 之间通信和同步的重要机制。通过 channel&#xff0c;goroutine 可以安全地交换数据&#xff0c;避免了共享内存带来的竞态条件和内存一致性问题。 1. Channel 的基本概念 Channel 是一个先进先出&#xff08;FI…...

HarmonyOS Next~鸿蒙元服务开发指南:核心功能与实践

HarmonyOS Next&#xff5e;鸿蒙元服务开发指南&#xff1a;核心功能与实践 一、元服务核心概念 原子化服务定义 元服务&#xff08;原子服务&#xff09;是鸿蒙系统的核心架构单元&#xff0c;具备独立业务能力的轻量化服务模块&#xff0c;支持免安装、跨设备调用和智能分发…...

stm32面试

数据结构相关问题 stm32面试 数据结构相关问题 目录基础数据结构树与图排序与查找算法 Linux相关问题Linux系统基础Linux命令与脚本Linux网络与服务 操作系统相关问题操作系统基础概念操作系统调度算法操作系统同步与通信 STM32相关问题STM32硬件基础STM32编程与开发STM32应用与…...

构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)

本系列文章目录 简介数据准备句子转换器&#xff08;本文&#xff09;向量数据库搜索与检索大语言模型开源检索增强生成评估大语言模型服务高级检索增强生成 RAG 在之前的博客中&#xff0c;我们学习了为RAG&#xff08;检索增强生成&#xff0c;Retrieval Augmented Generati…...

新能源汽车空调系统(R134A)性能评估(一)

国内外主流空调系统厂家&#xff1a;贝尔、德尔福、空调国际、法雷奥、电装、松芝、杰信、新电、豫新等 泛亚汽车的空调电子部是比较优秀的整车空调研发团队。 空调系统综合试验台架是一套由试验室、风量测定装置、空气调和器、空气温度测定装置、湿度测定装置、加热器试验辅助…...

STRUCTBERT:将语言结构融入预训练以提升深度语言理解

【摘要】最近&#xff0c;预训练语言模型BERT&#xff08;及其经过稳健优化的版本RoBERTa&#xff09;在自然语言理解&#xff08;NLU&#xff09;领域引起了广泛关注&#xff0c;并在情感分类、自然语言推理、语义文本相似度和问答等各种NLU任务中达到了最先进的准确率。受到E…...

MCP协议的Streamable HTTP:革新数据传输的未来

引言 在数字化时代&#xff0c;数据传输的效率和稳定性是推动技术进步的关键。MCP&#xff08;Model Context Protocol&#xff09;作为AI生态系统中的重要一环&#xff0c;通过引入Streamable HTTP传输机制&#xff0c;为数据交互带来了革命性的变化。本文将深入解读MCP协议的…...

基于 RK3588 的 YOLO 多线程推理多级硬件加速引擎框架设计(代码框架和实现细节)

一、前言 接续上一篇文章&#xff0c;这个部分主要分析代码框架的实现细节和设计理念。 基于RK3588的YOLO多线程推理多级硬件加速引擎框架设计&#xff08;项目总览和加速效果&#xff09;-CSDN博客https://blog.csdn.net/plmm__/article/details/146542002?spm1001.2014.300…...

stm32 can 遥控帧的问题

STM32单片机使用CAN协议进行通信 引用这个博客的一段话 CAN的遥控帧&#xff08;Remote Frame&#xff09;的主要作用是请求其他节点发送具 有特定ID的数据帧。具体来说&#xff0c;当一个节点需要从另一个节点获取数 据时&#xff0c;它可以发送一个遥控帧&#xff0c;而不是…...

机器人基础知识-1

1.六轴机器人中的六轴是什么&#xff1f; 第一轴&#xff08;J1&#xff09;&#xff1a;底座旋转 控制机器人整体绕垂直轴旋转&#xff08;左右摆动&#xff09;&#xff0c;决定工作范围的水平方向。 第二轴&#xff08;J2&#xff09;&#xff1a;下臂前后摆动 驱动机器人的…...

JAVA- 锁机制介绍 进程锁

进程锁 基于文件的锁基于Socket的锁数据库锁分布式锁基于Redis的分布式锁基于ZooKeeper的分布式锁 实际工作中都是集群部署&#xff0c;通过负载均衡多台服务器工作&#xff0c;所以存在多个进程并发执行情况&#xff0c;而在每台服务器中又存在多个线程并发的情况&#xff0c;…...

如何在WordPress中强制用户使用强密码?

在如今网络安全备受关注的环境下&#xff0c;弱密码问题不容忽视。很多用户习惯在多个网站使用相同且简单的密码&#xff0c;这样一来&#xff0c;若不强制他们在 WordPress 网站上使用强密码&#xff0c;网站的安全性就会受到威胁。尤其对于在线商店、会员网站、多作者博客等站…...

鸿蒙NEXT开发Base64工具类(ArkTs)

import util from ohos.util;/*** Base64 工具类* author: 鸿蒙布道师* since: 2025/03/31*/ export class Base64Util {/*** 创建 Base64Helper 实例* returns Base64Helper 实例*/private static createBase64Helper(): util.Base64Helper {return new util.Base64Helper();}…...

基于HUTOOL实现RSA工具类

一、前言&#xff1a;用 Hutool 简化 RSA 加密开发&#xff0c;提升代码安全与效率 在当今数据安全至关重要的时代&#xff0c;RSA 非对称加密作为保护敏感信息的核心技术&#xff0c;广泛应用于通信加密、数字签名、密钥交换等场景。然而&#xff0c;手动实现 RSA 算法涉及复…...

flink 分组窗口聚合 与 窗口表值函数聚合 的区别

警告&#xff1a;分组窗口聚合已经过时。推荐使用更加强大和有效的窗口表值函数聚合。 参考官方文档 在 Apache Flink 中&#xff0c;分组窗口聚合&#xff08;Group Window Aggregation&#xff09; 和 窗口表值函数聚合&#xff08;Windowing TVF Aggregation&#xff09;…...

prompt_status:5: command not found: wc解决办法

问题出现背景 想配置uniapp的命令行&#xff0c;在.zprofile配置路径的时候PATH 前面少打了一个$&#xff0c;执行了 source&#xff0c;导致各种命令都失效。 解决办法 用fider 打开用户文件夹&#xff0c;Command Shift .显示隐藏文件&#xff0c;用文本编辑器修改一下&…...

《STL 六大组件之容器篇:简单了解 list》

目录 一、list 简介二、list 的常用接口1. 构造函数&#xff08;constructor &#xff09;2. 迭代器&#xff08;iterator&#xff09;3. 容量、修改和访问&#xff08;capacity 、modify and access&#xff09; 一、list 简介 简单来说&#xff0c;list 就是数据结构初阶中学…...

向量数据库学习笔记(2) —— pgvector 用法 与 最佳实践

关于向量的基础概念&#xff0c;可以参考&#xff1a;向量数据库学习笔记&#xff08;1&#xff09; —— 基础概念-CSDN博客 一、 pgvector简介 pgvector 是一款开源的、基于pg的、向量相似性搜索 插件&#xff0c;将您的向量数据与其他数据统一存储在pg中。支持功能包括&…...

TCP的连接建立

面向连接 定义&#xff1a;在发送数据之前&#xff0c;需要建立一条点到点的连接 &#xff08;参数协商的过程。因为tcp要保证可靠&#xff0c;所以tcp通信是发生在双方之间、两端之间的&#xff0c;两端在正式发送数据之前需要约定一些初始参数&#xff0c;这个过程就是面向连…...

如何让AI帮你做用户运营:用户消费偏好分层和洞察

随着deepseek的爆火&#xff0c;我一直在想能不能用AI来帮我做用户运营&#xff0c;目前deepseek只能提供框架层面的运营建议&#xff0c;还无法实现将订单数据给到它&#xff0c;能够自动化分析并将用户分层&#xff0c;并给出可视化的运营洞察报表。但是&#xff0c;我要告诉…...

二分答案-P8647 [蓝桥杯 2017 省 AB] 分巧克力

题解&#xff1a;P8647 [蓝桥杯 2017 省 AB] 分巧克力 题目传送门 题目链接 一、题目描述 小明有N块不同尺寸的巧克力&#xff0c;需要切出K块相同大小的正方形巧克力分给小朋友们。要求找到能满足条件的最大的正方形边长。 二、题目分析 我们需要从N块巧克力中切出K个相…...

搜广推校招面经六十一

美团推荐算法 一、ANN算法了解么&#xff1f;说几种你了解的ANN算法 ANN 近似最近邻搜索&#xff08;Approximate Nearest Neighbor Search&#xff09;算法 1.1. KD-Tree&#xff08;K-Dimensional Tree&#xff0c;K 维树&#xff09; 类型: 空间划分数据结构适用场景: 低…...

某地老旧房屋自动化监测项目

1. 项目简介 自从上个世纪90年代以来&#xff0c;我国经济发展迅猛&#xff0c;在此期间大量建筑平地而起&#xff0c;并且多为砖混结构的住房&#xff0c;使用寿命通常约为30-50年&#xff0c;钢筋混凝土结构&#xff0c;钢结构等高层建筑&#xff0c;这些建筑在一般情况下的…...

【第一节】Python爬虫基础-HTTP基本原理

目录 前言 一、URI和URL是什么 二、什么是超文本 三、HTTP和HTTPS的区别 四、HTTP请求过程 五、请求 六、响应 前言 在着手开发爬虫程序之前&#xff0c;我们需要先掌握一些基础概念。本节将详细讲解HTTP的基本工作原理&#xff0c;重点分析从浏览器输入网址到获取网页内…...

docker打包使用有头模式playwright

1.打包镜像 创建Dockerfile文件如下 # playywright 官方镜像 FROM mcr.microsoft.com/playwright:v1.37.0-jammy# 设置非交互式环境变量和时区 ENV DEBIAN_FRONTENDnoninteractive ENV TZEtc/UTC# 安装 Python 3.9 和 pip&#xff08;修复时区阻塞问题&#xff09; RUN apt-g…...

VuePress 和 Docusaurus的对比

VuePress 和 Docusaurus 是两个流行的现代静态网站生成器 vuepress:首页 | VuePress Docusaurus&#xff1a;Docusaurus 博客 | Docusaurus中文文档 | Docusaurus中文网 一、技术栈和设计理念 VuePress 技术栈&#xff1a;基于Vue.js&#xff0c;专为技术文档设计&#xff0c…...

JAVA数据库增删改查

格式 Main.java(测试类) package com.example;import com.example.dao.UserDao; import com.example.model.User;public class Main {public static void main(String[] args) {UserDao userDao new UserDao();// 测试添加用户System.out.println(" 添加用户 ");Us…...

MSTP多域生成树

协议信息 MSTP 兼容 STP 和 RSTP&#xff0c;既可以快速收敛&#xff0c;又提供了数据转发的多个冗余路径&#xff0c;在数据转发过程中实现 VLAN 数据的负载均衡。 MSTP 可以将一个或多个 VLAN 映射到一个 Instance&#xff08;实例&#xff09;&#xff08;一个或多个 VLAN…...

HashMap 在 JDK 1.7 和 JDK 1.8 有什么区别

HashMap 在 JDK 1.7 和 JDK 1.8 中的实现存在显著差异&#xff0c;主要体现在以下几个方面&#xff1a; 1. 数据结构的变化 • JDK 1.7&#xff1a;HashMap 的底层数据结构是数组 单向链表。当哈希冲突发生时&#xff0c;新的元素会插入到链表的头部&#xff08;头插法&#…...

Mysql忽略大小写

🚀欢迎来到我的【Mysql】专栏🚀 🙋我是小蜗,一名在职牛马。🐒我的博客主页​​​​​​ ➡️ ➡️ 小蜗向前冲的主页🙏🙏欢迎大家的关注,你们的关注是我创作的最大动力🙏🙏在 MySQL 中取消大小写区分主要涉及以下两个层面的配置,具体操作如下: 一、表名大…...

基于TradingView和CTPBee的自动化期货交易系统实现

引言 在量化交易领域&#xff0c;TradingView因其强大的技术分析工具和丰富的指标库而广受欢迎&#xff0c;但是其不支持国内期货自动化交易&#xff0c;CTPBee则是一个优秀的国产Python期货交易接口。本文将介绍如何将两者结合&#xff0c;实现一个完整的自动化交易系统。 本…...

昇腾CANN算子共建仓CANN-Ops正式上线Gitee,首批算子已合入

在人工智能技术呈指数级发展的今天&#xff0c;AI创新已走向更底层的算法创新&#xff0c;以DeepSeek为例&#xff0c;通过MoE模型架构和底层算法创新&#xff0c;不仅获取极佳的模型性能&#xff0c;又更大程度释放硬件性能&#xff0c;降低硬件使用成本。 算子&#xff0c;作…...

基于PyQt5的自动化任务管理软件:高效、智能的任务调度与执行管理

基于PyQt5的自动化任务管理软件&#xff1a;高效、智能的任务调度与执行管理 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着…...

Pycharm(八):字符串切片

一、字符串分片介绍 对操作的对象截取其中一部分的操作&#xff0c;比如想要获取字符串“888666qq.com前面的qq号的时候就可以用切片。 字符串、列表、元组都支持切片操作。 语法&#xff1a;字符串变量名 [起始:结束:步长] 口诀&#xff1a;切片其实很简单&#xff0c;只顾头来…...

C++编程学习笔记:函数相关特性、引用与编译流程

目录 一、函数的缺省参数 &#xff08;一&#xff09;全缺省参数 &#xff08;二&#xff09;半缺省参数 二、函数重载 &#xff08;一&#xff09;参数类型不同 &#xff08;二&#xff09;参数个数不同 &#xff08;三&#xff09;参数类型顺序不同 三、引用相关问题…...

Nginx 配置 HTTPS 与 WSS 完整指南

Nginx 配置 HTTPS 与 WSS 完整指南 本教程将手把手教你如何为网站配置 HTTPS 加密访问&#xff0c;并通过反向代理实现安全的 WebSocket&#xff08;WSS&#xff09;通信。以 https://www.zhegepai.cn 域名为例&#xff0c;完整流程约需 30 分钟完成。 一、前置准备 1.1 域名…...

链表基本操作

文章目录 1、单链表1.1 链表的创建1.2 链表的遍历1.3 链表的删除1.4 链表的插入1.5 链表和数组 2、双向链表2.1 双链表的创建2.2 双链表的删除2.3 双链表的插入2.4 双向循环链表2.5 双链表优缺点 1、单链表 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;插入…...

【huggingface 数据下载】ssh / https 不同的下载流程,hf 镜像下载注意事项

ssh 下载流程 在 linux 服务器上生成 ssh key将 pub key 放入 huggingface 的 setting 中通过 git lfs install 然后 git clone githf.co … 来下载数据 遇到的问题 一直卡在 Updating files 后 卡住的可能原因&#xff1a; 系统当前限制了允许监视的最大文件数&#xff1…...

简单版CentOS7配置haproxy

一、实验步骤 1、自行下载pes的tar包 然后解压到家目录下 tar -xzvf pes.tar.gz 2、创建一个目录 mkdir docker-compose-pes-lb2 3、在这个目录下写两个文件docker-compose.yml和haproxy.cfg docker-compose.yml version: 3 services: db: image: mysql:5.7.44 container…...

leetcode146.LRU缓存

思路源自 【面试高频】146. LRU 缓存 采用哈希表双向链表 put一个键值对时&#xff0c;采用头插法将缓存块置于等级较高的位置&#xff0c;如果put数量超出限制&#xff0c;那么就将尾部的缓存块删除&#xff0c;以此达到置换的一个效果 get一个键值对也是同样的思路&#xf…...