设计模式go语言实现----外观模式facade

本文深入讲解外观模式,一种简化子系统复杂性的设计模式。通过电脑启动和关机流程的实例,展示如何使用Go语言实现外观模式,从而提高代码的可读性和易用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 概念

外观模式(facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

如果定义不是很理解的话,读者可以对照下面电脑的例子认真思考一下:
电脑整机时CPU、内存、硬盘等的外观,有了这个外观之后,启动电脑和关闭电脑都简化了。
UML类图:
在这里插入图片描述
外观模式主要包含两个角色:

  • Facade(外观角色): 在客户端可以调用这个角色的方法,在外观角色中可以知道相关的子系统的功能和责任;在正常情况下,它将所有从客户端发来的请求委派道相应的子系统中去,传递给相应的子系统对象处理。
  • SubSystem(子系统角色): 在软件系统中可以由一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能;子系统并不知道外观的存在,对于子系统而言,外观角色仅仅时另一个客户端而已。

2 go语言实现

2.1 子系统角色实现

type Power struct{}

func (p Power) PowerOn() {
	fmt.Println("电源通电")
}

func (p Power) PowerOff() {
	fmt.Println("电源下电")
}

type Mainboard struct{}

func (m Mainboard) PowerOn() {
	fmt.Println("主板通电")
}

func (m Mainboard) PowerOff() {
	fmt.Println("主板下电")
}

type CPU struct{}

func (cpu CPU) PowerOn() {
	fmt.Println("CPU通电")
}

func (cpu CPU) PowerOff() {
	fmt.Println("CPU下电")
}

2.2 外观角色实现

type Computer interface {
	Boot()
	Shutdown()
}

type DesktopComputer struct {
	Power
	Mainboard
	CPU
}

func (dc DesktopComputer) Boot() {
	fmt.Println("台式机开始启动")
	dc.Power.PowerOn()
	dc.Mainboard.PowerOn()
	dc.CPU.PowerOn()
	fmt.Println("台式机启动完毕")
}

func (dc DesktopComputer) Shutdown() {
	fmt.Println("台式机开始关机")
	dc.Power.PowerOff()
	dc.Mainboard.PowerOff()
	dc.CPU.PowerOff()
	fmt.Println("台式机关机完毕")
}

type Laptop struct {
	Power
	Mainboard
	CPU
}

func (l Laptop) Boot() {
	fmt.Println("笔记本电脑开始启动")
	l.Power.PowerOn()
	l.Mainboard.PowerOn()
	l.CPU.PowerOn()
	fmt.Println("笔记本电脑启动完毕")
}

func (l Laptop) Shutdown() {
	fmt.Println("笔记本电脑开始关机")
	l.Power.PowerOff()
	l.Mainboard.PowerOff()
	l.CPU.PowerOff()
	fmt.Println("笔记本电脑关机完毕")
}

2.3 客户端调用

func main() {
	tComputer := facade.NewComputer("d")
	tComputer.Boot()
	fmt.Println("=============")
	tComputer.Shutdown()
	fmt.Println("=============")
	tComputer = facade.NewComputer("l")
	tComputer.Boot()
	fmt.Println("=============")
	tComputer.Shutdown()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值