DesignPatternFacade外观模式

DesignPatternFacade外观模式

高层次业务解耦

发现到解决

业务问题

解耦

通俗代码

设计招商银行一个认证系统

  1. 卡号认证
  2. 照片认证
  3. 认证中心统一办理
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()
}

注意事项

  • 设计外观时候,不需要增加额外功能
  • 外观只需要存储子组件的接口就可以
  • 总的来说,外观只是一个高层次业务
posted @ 2020-12-12 19:46  maob  阅读(74)  评论(0编辑  收藏  举报