设计模式笔记 - 外观模式

152 阅读1分钟

外观模式是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个简单的接口。


解决什么问题?

假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下, 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确的顺序执行方法等。最终, 程序中类的业务逻辑将与第三方类的实现细节紧密耦合, 使得理解和维护代码的工作很难进行。此时可考虑使用外观模式,将复杂的调用关系进行整理,对外提供简单的接口。


实现步骤:

  • 厘清子系统的类调用关系
  • 创建外观类,对子系统的类进行组合调用,实现全新的功能,简化客户端编码

优势:

  • 你可以让自己的代码独立于复杂子系统。

劣势:

  • 外观可能成为与程序中所有类都耦合的上帝对象

实现实例代码:

package main

type videoFile struct{}

func (v *videoFile) doSomething(filename string) {}

type audioMixer struct{}

func (a *audioMixer) doSomething(vf *videoFile) {}

type codecCompression struct{}

func (c *codecCompression) doSomething(vf *videoFile) {}

type videoConverter struct{}

func (v *videoConverter) convert(filename string) {
	vf := videoFile{}
	am := audioMixer{}
	cc := codecCompression{}

	vf.doSomething(filename)
	am.doSomething(&vf)
	cc.doSomething(&vf)
}

func main() {
	vc := videoConverter{}
	vc.convert("hello.mp4")
}

参考