1. 程式人生 > 其它 >結構型:二. 外觀模式(facade)

結構型:二. 外觀模式(facade)

外觀模式是什麼

外觀模式是一種結構性設計模式,它能為程式庫、框架或者其他複雜的子系統提供一個統一的高層介面,使子系統更容易使用。外觀模式就是聚合多個介面實現,對外只暴露單個介面。隱藏子系統的複雜性。呼叫方不關心實現步驟。

為什麼要用外觀模式

當子系統提供的功能很多,而我們子需要多個子系統中很少的幾個功能時。這時我們可以用外觀模式,讓我們不必關注與子系統眾多的方法。或者子系統相互呼叫複雜時,外觀模式我們不必清楚子系統中眾多類之間的相互呼叫關係。

外觀模式怎麼實現

電腦啟動需要依次啟動電源、主機板、CPU、記憶體、硬碟。當然我們也可以用外觀模式封裝一下,把它們都封裝到一起。當然這個例子比較簡單,子系統之間沒有相互呼叫。

package facade

import "fmt"

// 電源
type Power struct{}

func (Power) start() {
    fmt.Println("啟動電源。。。")
}

// 主機板
type Motherboard struct{}

func (Motherboard) start() {
    fmt.Println("啟動主機板。。。")
}

// CPU
type CPU struct{}

func (CPU) start() {
    fmt.Println("啟動CPU。。。")
}

// 記憶體
type Memory struct{}

func (Memory) start() {
    fmt.Println("啟動記憶體管理。。。")
}

// 硬碟
type Disk struct{}

func (Disk) start() {
    fmt.Println("啟動硬碟。。。")
}

// 開機鍵
type Computer struct{}

func (Computer) Start() {
    new(Power).start()
    new(Motherboard).start()
    new(CPU).start()
    new(Memory).start()
    new(Disk).start()
}

優點

  1. 提高易用性:外觀模式使子系統更容易使用,客戶端更容易使用子系統功能。
  2. 重點突出,降低複雜度:外觀模式更能體現子系統的核心功能,重點突出,一定程度降低系統整體複雜度。
  3. 減少依賴:客戶端呼叫外觀模式提供的統一高層介面,比客戶端單獨呼叫眾多子系統減少依賴,降低子系統與呼叫者之間的耦合度。

缺點

  1. 外觀類可能耦合的類較多,使外觀類變的臃腫,且不易維護。