DesignPatternFacade外观模式
DesignPatternFacade外观模式
高层次业务解耦
发现到解决
业务问题
解耦
通俗代码
设计招商银行一个认证系统
- 卡号认证
- 照片认证
- 认证中心统一办理
package main
import "fmt"
// 统一认证接口
type AllCheck interface {
AllCheck()
}
type ZsAll struct{
Card
Img
}
func NewZsAll(card Card,img Img) *ZsAll {
return &ZsAll{
Card: card,
Img: img,
}
}
func (za *ZsAll) AllCheck() {
za.Card.CardCheck()
za.Img.ImgCheck()
}
// 卡号认证接口,可以换成其他卡
type Card interface {
CardCheck()
}
// 照片认证
type Img interface {
ImgCheck()
}
// 招商银行卡
type ZsCard struct {
Num int
}
func NewZsCard(num int) *ZsCard {
return &ZsCard{Num:num}
}
func (zc *ZsCard) CardCheck() {
fmt.Println("你的卡号", zc.Num, "已经上传认证中心")
}
// 你的照片地址
type ZsImg struct {
ImsSrc string
}
func NewZsImg(imgsrc string) *ZsImg {
return &ZsImg{ImsSrc:imgsrc}
}
func (zi *ZsImg) ImgCheck() {
fmt.Println("你的img已经在在线认证", zi.ImsSrc)
}
func main() {
card := NewZsCard(666)
img := NewZsImg("baidu.com.png")
all := NewZsAll(card, img)
all.AllCheck()
}
注意事项
- 设计外观时候,不需要增加额外功能
- 外观只需要存储子组件的接口就可以
- 总的来说,外观只是一个高层次业务