目录
外观模式(Facade Pattern)又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,用于访问子系统中的一组接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
(1)优点:
(2)缺点:
package main
import "fmt"
// 一个文件压缩工具,需要提供压缩和解压缩功能。压缩功能涉及到文件的读取、压缩算法的选择和压缩文件的写入,
// 而解压缩功能涉及到文件的读取、解压缩算法的选择和解压缩文件的写入。我们希望能够通过一个简单的接口来调用这些复杂的功能。
// 子系统:文件读取
type FileReader struct {
}
func (f *FileReader) ReadFile(fileName string) string {
return "File Content"
}
// 子系统:压缩算法
type Compressor struct {
}
func (c *Compressor) Compress(data string) string {
return "Compressed Data"
}
// 子系统:文件写入
type FileWriter struct {
}
func (w *FileWriter) WriteFile(fileName string, data string) {
fmt.Printf("Write data '%s' to file '%s'\n", data, fileName)
}
// 外观:文件压缩工具
type FileCompressionFacade struct {
reader *FileReader
compressor *Compressor
writer *FileWriter
}
func NewFileCompressionFacade() *FileCompressionFacade {
return &FileCompressionFacade{
reader: &FileReader{},
compressor: &Compressor{},
writer: &FileWriter{},
}
}
func (f *FileCompressionFacade) CompressFile(fileName string) {
fmt.Println("Compressing file:", fileName)
// 读取文件
data := f.reader.ReadFile(fileName)
// 压缩数据
compressedData := f.compressor.Compress(data)
// 写入压缩文件
f.writer.WriteFile(fileName+".zip", compressedData)
fmt.Println("File compression completed.")
}
// 客户端代码
func main() {
facade := NewFileCompressionFacade()
facade.CompressFile("example.txt")
}
更多【java-GO设计模式——12、外观模式(结构型)】相关视频教程:www.yxfzedu.com