设计模式--门面(Facade)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--门面(Facade)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模式定義
為子系統中的一組接口提供一個一致(穩定)的界面,Facade模式定義了一個高層接口,這個接口使得這個子系統更加容易使用(復用)
類圖
應用場景
1.當你需要使用復雜子系統的有限但直接的接口時,請使用Facade模式
2.當你需要將子系統組織成層時,請使用Facade模式
優點
簡化客戶端的調用
要點總結
要點總結
- 從客戶程序的角度來看,Facade模式簡化了整個組件系統的接口,對于組件內部與外部客戶程序來說,達到了一種“解耦”的效果–內部子系統的任何變化不會影響到facade接口的變化
- Facade設計模式更注重從架構的層次去看整個系統,而不是單個類的層次,Facade很多時候更是一種架構設計模式
- Facade設計模式并非一個集裝箱,可以任意地放進任何多個對象,Facade模式中組件的內部應該是“相互耦合關系比較大的一系列組件”,而不是一個簡單的功能集合
Go語言代碼實現
工程目錄
facade.go
package Facadeimport "fmt"type CarModel struct {}func NewCarModel() *CarModel {return &CarModel{} }func (c * CarModel) SetModel () {fmt.Println("CarModel - SetModel") }type CarEngine struct {} func NewCarEngine () *CarEngine {return &CarEngine{} }func (c *CarEngine) SetEngine (){fmt.Println("CarEngine - SetEngine") }type CarBody struct {} func NewCarBody () *CarBody {return &CarBody{} }func (c *CarBody) SetCarBody() {fmt.Println("CarBody - SetBody") }type CarFacade struct {model CarModelengine CarEnginebody CarBody }func NewCarFacade() * CarFacade{return &CarFacade{model: CarModel{},engine: CarEngine{},body: CarBody{},} }func (c *CarFacade) CreateCompleteCar() {c.model.SetModel()c.engine.SetEngine()c.body.SetCarBody() }facade_test.go
package Facadeimport "testing"func TestCarFacade_CreateCompleteCar(t *testing.T) {facade := CarFacade{}facade.CreateCompleteCar() }總結
以上是生活随笔為你收集整理的设计模式--门面(Facade)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--享元(Flyweight)模
- 下一篇: 设计模式--中介者(Mediator)模