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

Golang|外观模式和具体逻辑

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 最终返回的是Document的切片,然后取得Bytes自己再去做反序列化拿到文档的各种详细信息。

  • 外观模式是一种结构型设计模式,它的目的是为复杂的子系统提供一个统一的高层接口,让外部调用者(客户端)可以更简单地使用子系统,而不需要了解子系统内部的细节。
  • 动机:当系统内部有很多复杂的模块、接口时,直接使用会非常麻烦。外观模式可以对外提供一个简化接口,让客户端可以很容易地访问系统的功能。
  • 核心作用:封装复杂性,提供简单接口。
  • 特点:
    • 降低子系统之间的耦合度
    • 客户端只需要跟外观对象交互
    • 不影响子系统内部功能的扩展
// 外观模式结构图+----------------+|    Client       |+--------+--------+|v+--------+--------+|      Facade      |   (外观类,统一对外接口)+--------+--------+|+------------------+------------------+|                  |                  |v                  v                  v
+------------+    +--------------+    +--------------+
| SubSystem1 |    |  SubSystem2   |    |  SubSystem3   |
| (Power)    |    | (HardDrive)   |    | (OperatingSys)|
+------------+    +--------------+    +--------------+
// 电脑开机示例package mainimport "fmt"// 子系统:电源管理
type Power struct{}func (p *Power) On() {fmt.Println("Power is ON.")
}
func (p *Power) Off() {fmt.Println("Power is OFF.")
}// 子系统:硬盘管理
type HardDrive struct{}func (h *HardDrive) ReadData() {fmt.Println("HardDrive is reading data.")
}// 子系统:操作系统管理
type OperatingSystem struct{}func (os *OperatingSystem) Boot() {fmt.Println("Operating System is booting up.")
}
func (os *OperatingSystem) Shutdown() {fmt.Println("Operating System is shutting down.")
}// 外观(Facade)
type ComputerFacade struct {power    *PowerhardDrive *HardDriveos       *OperatingSystem
}// 创建外观对象
func NewComputerFacade() *ComputerFacade {return &ComputerFacade{power:    &Power{},hardDrive: &HardDrive{},os:       &OperatingSystem{},}
}// 开机流程
func (c *ComputerFacade) Start() {fmt.Println("Starting the computer...")c.power.On()c.hardDrive.ReadData()c.os.Boot()fmt.Println("Computer is ready to use.")
}// 关机流程
func (c *ComputerFacade) Shutdown() {fmt.Println("Shutting down the computer...")c.os.Shutdown()c.power.Off()fmt.Println("Computer is turned off.")
}func main() {computer := NewComputerFacade()computer.Start()fmt.Println()computer.Shutdown()
}Starting the computer...
Power is ON.
HardDrive is reading data.
Operating System is booting up.
Computer is ready to use.Shutting down the computer...
Operating System is shutting down.
Power is OFF.
Computer is turned off.
  • 子系统 Power、HardDrive、OperatingSystem 提供各自复杂的功能。
  • ComputerFacade 封装了子系统的调用顺序,提供了简单的 Start() 和 Shutdown() 方法。
  • 外部调用者(main函数)只需要关心 ComputerFacade,不需要了解具体步骤。
  • 外观模式 = 复杂系统的门面 ➔ 把一堆子系统打包成一个简单接口,统一对外提供服务。
  • 隐藏复杂性:客户端不用知道各个子系统的复杂调用过程。
  • 降低耦合:客户端只依赖外观类,子系统改了也不会直接影响客户端。
  • 更清晰的结构:便于维护和扩展,比如以后增加“自检模块”,只需要在 Facade 中增加调用,不需要改客户端。
http://www.xdnf.cn/news/2624.html

相关文章:

  • 前端:纯HTML、CSS和JS菜单样式
  • 如何免费把PPT的页面输出为透明的图片-快速制作图新说汇报内容
  • 【Java开发日记】OpenFeign 的 9 个坑
  • 【wpf】 WPF中实现动态加载图片浏览器(边滚动边加载)
  • GCC 15.1 发布,包含 COBOL 编译器及多项其他改进
  • FastAPI中使用Pydantic进行数据验证的示例与关键技术点分析
  • java Optional
  • 【vLLM 学习】CPU 离线处理
  • 通俗易懂一文讲透什么是 MCP?
  • 坐标转换:从WGS-84到国内坐标系(GCJ-02BD-09)
  • 大语言模型 - 运行、微调的显存计算详解与优化 全量微调、LoRA 优化策略
  • windows安装docker教程
  • PTA -L1-005 考试座位号(BufferedReader、Arraylist动态数组、Map)
  • 记录一下从debian12升级到debian13出现的小插曲01
  • C++翻转数相乘 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析
  • shell编程基础知识及脚本示例
  • Android源码编译命令详解
  • 基于 Amazon RDS 数据库之间复制数据并屏蔽个人身份信息
  • 写读后感的时候,可以适当地引用书中的内容吗?
  • 【JavaGUI】
  • 边缘函数:全栈开发的最后1毫秒性能革命
  • MQTT - MQTT 实践(Windows EMQX、MQTTX、客户端认证、连接与主题)
  • ES练习册
  • Java多线程实现顺序执行
  • [计算机科学#3]:布尔逻辑 (计算机数学基础)
  • Python第三周作业
  • 语音合成之八-情感化语音合成的演进路线
  • [ECCV 2024]UMBRAE: Unified Multimodal Brain Decoding
  • 赞奇AIknow是什么?
  • 2025年8月PMP考试费用上涨?8月PMP考试费用解析!