前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之外观模式

设计模式之外观模式

原创
作者头像
孟斯特
发布2024-01-31 15:24:25
1040
发布2024-01-31 15:24:25
举报
文章被收录于专栏:code人生code人生

1. 基本概念

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简化系统接口的高层接口,使得系统更易于使用。外观模式定义了一个高层接口,这个接口隐藏了系统中多个子系统的复杂性,为客户端提供了一个简化的入口点。

2. 适用场景

  • 当一个复杂系统中有多个子系统,而客户端只关心与系统的一个高层接口交互时。
  • 当需要简化一个复杂系统的接口,提供一个更易用的接口供外部使用时。
  • 当需要对系统的接口进行封装,隔离客户端和系统的具体实现细节时。

3. 优缺点

优点:

  • 简化接口: 外观模式通过提供一个简化的高层接口,隐藏了系统的复杂性,使得客户端更容易使用。
  • 松耦合: 外观模式降低了客户端与系统之间的耦合度,客户端只需要与外观接口交互,而不需要了解系统的具体实现。
  • 提高可维护性: 外观模式将系统的实现细节封装在一个接口后,更容易维护和修改系统的实现。

缺点:

  • 不符合开闭原则: 如果系统的接口发生变化,可能需要修改外观类,这违反了开闭原则(对扩展开放,对修改关闭)。

4. 示例

考虑一个计算机启动的例子。在一个计算机启动的过程中,涉及到多个子系统的初始化,例如 CPU、内存、硬盘等。使用外观模式可以封装这些子系统的初始化过程,为客户端提供一个简化的接口。

代码语言:go
复制
package main

import "fmt"

// Subsystem1
type CPU struct{}

func (c *CPU) Start() {
	fmt.Println("CPU is starting")
}

// Subsystem2
type Memory struct{}

func (m *Memory) Load() {
	fmt.Println("Memory is loading")
}

// Subsystem3
type HardDrive struct{}

func (h *HardDrive) Read() {
	fmt.Println("Hard Drive is reading")
}

// Facade
type ComputerFacade struct {
	cpu       *CPU
	memory    *Memory
	hardDrive *HardDrive
}

func NewComputerFacade() *ComputerFacade {
	return &ComputerFacade{
		cpu:       &CPU{},
		memory:    &Memory{},
		hardDrive: &HardDrive{},
	}
}

func (f *ComputerFacade) Start() {
	fmt.Println("Computer is starting...")
	f.cpu.Start()
	f.memory.Load()
	f.hardDrive.Read()
	fmt.Println("Computer is started")
}

// Client
func main() {
	computer := NewComputerFacade()
	computer.Start()
}

在这个示例中,ComputerFacade 封装了启动计算机所需的多个子系统,包括 CPU、Memory、HardDrive。客户端只需要与 ComputerFacade 交互,而无需了解启动过程中各个子系统的具体细节。这样简化了客户端的使用,同时提高了系统的可维护性。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 基本概念
  • 2. 适用场景
  • 3. 优缺点
    • 优点:
      • 缺点:
      • 4. 示例
      相关产品与服务
      云开发 CloudBase
      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档