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

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 中增加调用,不需要改客户端。

相关文章:

  • 【杂谈】-人工智能驱动的网络安全威胁:新一代网络钓鱼
  • 第33周JavaSpringCloud微服务 分布式综合应用
  • 系统架构师2025年论文《论面向对象的软件设计——UML 在面向对象软件架构中的应用》
  • GpuGeek全面接入智谱GLM Z1系列推理模型!!
  • VLM-E2E:通过多模态驾驶员注意融合增强端到端自动驾驶——论文阅读
  • 解决redis序列号和反序列化问题
  • 喷泉码解码成功率
  • Transformer数学推导——Q29 推导语音识别中流式注意力(Streaming Attention)的延迟约束优化
  • Python-pandas-DataFrame取值--.loc[]、.iloc[] 具体的操作及详细语义和语法说明
  • Virtualbox虚拟机全屏后黑屏问题解决
  • kalibr:相机模型
  • datasets 数据处理封装后,统一处理流程以避免Dataset Map顺序依赖问题
  • 云原生周刊:Kubernetes v1.33 正式发布
  • 机器学习第三篇 模型评估(交叉验证)
  • 算法思想之哈希表
  • 前端:纯HTML、CSS和JS菜单样式
  • 在matlab中使用UAV123官方toolkits测试自己的数据集
  • 鼠标滚动字体缩放
  • STM32 USB配置详解
  • 从数据到决策:如何使用Python进行自动驾驶数据分析
  • 人社部:我国劳动力市场潜力足,韧性强
  • 四川苍溪县教育局通报“工作人员辱骂举报学生”:停职检查
  • 103岁抗战老兵、抗美援朝老兵、医学专家张道中逝世
  • 人民日报读者点题:规范涉企执法,怎样防止问题反弹、提振企业信心?
  • 以军称若停火谈判无进展,将大幅扩大加沙军事行动
  • 饶权已任国家文物局局长