go: Facade Pattern

项目结构:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Facade Pattern 外观模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/4/20 20:24
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : ring.go
*/
package domain
 
// RingOrder 钻戒定制入参
type RingOrder struct {
    Carat    float64
    Clarity  string
    Material string
}
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Facade Pattern 外观模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/4/20 20:24
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : ring.go
*/
package service
 
import (
    "fmt"
    "godesginpattern/facade/domain"
)
 
// IRing 戒托制作接口
type IRing interface {
    Make(domain.RingOrder)
}
 
type ringImpl struct{}
 
func NewRing() IRing {
    return &ringImpl{}
}
 
func (r *ringImpl) Make(ord domain.RingOrder) {
    fmt.Printf("✅ 戒托制作:制作【%s】材质的戒托成功\n", ord.Material)
}
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Facade Pattern 外观模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/4/20 20:24
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : inlay.go
*/
package service
 
import "fmt"
 
// IInlay 镶嵌接口
type IInlay interface {
    DoInlay()
}
 
type inlayImpl struct{}
 
func NewInlay() IInlay {
    return &inlayImpl{}
}
 
func (i *inlayImpl) DoInlay() {
    fmt.Println("✅ 珠宝镶嵌:将钻石镶嵌到戒托上成功")
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Facade Pattern 外观模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/4/20 20:24
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : diamond.go
*/
package service
 
import (
    "fmt"
    "godesginpattern/facade/domain"
)
 
// IDiamond 钻石采购接口
type IDiamond interface {
    Buy(domain.RingOrder)
}
 
type diamondImpl struct{}
 
func NewDiamond() IDiamond {
    return &diamondImpl{}
}
 
func (d *diamondImpl) Buy(ord domain.RingOrder) {
    fmt.Printf("✅ 钻石采购:采购【%.2f克拉,净度%s】的钻石成功\n", ord.Carat, ord.Clarity)
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Facade Pattern 外观模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/4/20 20:25
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : cert.go
*/
package service
 
import "fmt"
 
// ICert 证书办理接口
type ICert interface {
    Apply()
}
 
type certImpl struct{}
 
func NewCert() ICert {
    return &certImpl{}
}
 
func (c *certImpl) Apply() {
    fmt.Println("✅ 证书办理:成品钻戒鉴定证书办理成功")
}
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Facade Pattern 外观模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/4/20 20:25
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : ring_facade.go
*/
package facade
 
import (
    "fmt"
    "godesginpattern/facade/domain"
    "godesginpattern/facade/service"
)
 
// IRingFacade 外观统一接口
type IRingFacade interface {
    Custom(ord domain.RingOrder)
}
 
type ringFacade struct {
    dia   service.IDiamond
    ring  service.IRing
    inlay service.IInlay
    cert  service.ICert
}
 
// NewRingFacade 依赖注入,完全解耦
func NewRingFacade(
    dia service.IDiamond,
    ring service.IRing,
    inlay service.IInlay,
    cert service.ICert,
) IRingFacade {
    return &ringFacade{
        dia:   dia,
        ring:  ring,
        inlay: inlay,
        cert:  cert,
    }
}
 
func (f *ringFacade) Custom(ord domain.RingOrder) {
    fmt.Println("======== 开始定制钻戒 ========")
    f.dia.Buy(ord)
    f.ring.Make(ord)
    f.inlay.DoInlay()
    f.cert.Apply()
    fmt.Println("======== 钻戒定制完成,可取货 ========\n")
}

调用:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Facade Pattern 外观模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/4/20 20:28
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : facadebll.go
facade/
├── domain
│   └── ring.go        // 领域模型
├── service
│   ├── diamond.go     // 钻石采购子系统
│   ├── ring.go        // 戒托制作子系统
│   ├── inlay.go       // 镶嵌子系统
│   └── cert.go        // 证书子系统
├── facade
│   └── ring_facade.go // 外观门面层
├── go.mod
└── main.go
*/
package bll
 
import (
    "godesginpattern/facade/domain"
    "godesginpattern/facade/facade"
    "godesginpattern/facade/service"
)
 
// 示例
func FacadeMain() {
    // 依赖注入初始化子系统
    diaSvc := service.NewDiamond()
    ringSvc := service.NewRing()
    inlaySvc := service.NewInlay()
    certSvc := service.NewCert()
 
    // 外观门面
    shop := facade.NewRingFacade(diaSvc, ringSvc, inlaySvc, certSvc)
 
    // 定制单1
    shop.Custom(domain.RingOrder{
        Carat:    1.0,
        Clarity:  "VVS",
        Material: "铂金",
    })
 
    // 定制单2
    shop.Custom(domain.RingOrder{
        Carat:    0.5,
        Clarity:  "VS",
        Material: "18K金",
    })
}

输出:

相关推荐
c++之路5 小时前
C++ 设计模式全总结
java·c++·设计模式
爱吃牛肉的大老虎7 小时前
Spring中用到的设计模式
java·spring·设计模式
代码中介商7 小时前
C++四大设计模式:单例、工厂、观察者、策略
java·c++·设计模式
basketball6168 小时前
设计模式入门:3. 适配器模式详解 C++实现
c++·设计模式·适配器模式
AI大法师9 小时前
最小视觉系统怎么搭:Logo、颜色、字体、模板和品牌介绍先做什么
人工智能·设计模式·新媒体运营
知彼解己10 小时前
LLM-based Planning:从后端视角理解 Agent 规划层
后端·golang·ai编程
geovindu11 小时前
python: N-Barrier Pattern
开发语言·python·设计模式·屏障模式
basketball61614 小时前
Go语言从入门到进阶:8. 接口
开发语言·后端·golang
basketball61614 小时前
设计模式入门:2. 工厂模式详解 C++实现
开发语言·c++·设计模式
basketball61614 小时前
设计模式入门:1. 单例模式详解 C++实现
c++·单例模式·设计模式