寒江雪 Go實現工廠模式

2021-08-16 10:01:12 字數 2339 閱讀 2327

簡單工廠的實現思想,即建立乙個工廠,將產品的實現邏輯集中在這個工廠中。

/***

* ****** factory

*/type foodfactory struct

func (ff foodfactory) createfood(name string) food

return s;

}type food inte***ce

type meat struct

type hamberger struct

func (m meat) eat()

func (h hamberger) eat()

func main()

f.createfood("meat").eat()

f.createfood("hamberger").eat()

}

工廠方法用於彌補簡單工廠的不足之處:

工廠方法將產品的建立邏輯寫在子類之中,**如下

/***

* factory method

*/type factory inte***ce

type meatfactory struct

func (mf meatfactory) create() food

return m

}type hamberge***ctory struct

func (hf hamberge***ctory) create() food

return h

}type food inte***ce

type meat struct

type hamberger struct

func (m meat) eat()

func (h hamberger) eat()

func main()

mf.create().eat()

hf := hamberge***ctory{}

hf.create().eat()

}

抽象工廠是針對乙個產品族而言的.

產品族就好像**.乙個**包含了好幾種食品,而每一種食品都是一種型別的食物。舉個例子.

乙個**定義為食品和飲料.而有一家餐館的食品包括肉和漢堡,飲料包括coco和茶.這家餐館不想單獨**某種食品和飲料,只賣**.

於是老闆定義:

定好了之後,把**a外包給工廠a負責生產,**b外包給工廠b負責生產。兩個工廠根據這家店的需求,實習那了生產食品和生產飲料的方法。a工廠就負責a**,那麼他就需要實現生產肉的邏輯和生產coco的邏輯即可.而b工廠只需要實現生產漢堡和生產茶的邏輯即可.

這樣以來,來到店裡的客人,只需要訂購**,服務員通知工廠生產並送達即可。假設乙個客人要**a,服務員通知工廠a,先生產乙個肉,再來一杯coco,服務員負責把這些產品遞給客人食用即可。

/***

* abstract factory

*/type hjxfactory inte***ce

type factorya struct

func (af factorya)createfood()food

return f

}func (af factorya)createdrink()drink

return d

}type factoryb struct

func (bf factoryb)createfood()food

return f

}func (bf factoryb)createdrink()drink

return d

}type food inte***ce

type meat struct

type hamberger struct

func (m meat) eat()

func (h hamberger) eat()

type drink inte***ce

type coco struct

func (cc coco)drink()

type tea struct

func (t tea)drink()

func main()

fa.createfood().eat()

fa.createdrink().drink()

fb := factoryb{}

fb.createfood().eat()

fb.createdrink().drink()

}

author: 寒江雪

date:2018-03-08

寒江雪 Go實現橋接模式

bridge pattern說的是,當乙個系統中,包含乙個元件,該元件是可變的,該系統是可變的。這個時候就需要乙個橋連線抽象的系統和抽象的元件。如果該系統包含多個其他的元件,這些元件都是可變的時候,也需要在該系統和這些元件之間架橋。如果該系統包含的某個元件所包含的元件,是可變的,那麼遞迴地重複上述過...

寒江雪 Go實現觀察者模式

觀察者模式使得一種型別的例項可以傳送事件給其他型別,前提是接收事件的例項要根傳送者訂閱這個事件。先來定義要使用到的介面 package observer type event struct observer inte ce notifier inte ce 然後寫幾個簡單的型別實現這些介面 pack...

Go實現設計模式 工廠模式

抽象工廠模式 工廠模式,屬於設計模式三大類之一的建立模式裡。其核心思想是提供乙個建立物件的超類,允許通過該介面指定建立子類物件的型別。從go的角度應用的說,工廠模式就是提供乙個超類,這個超類有乙個建立介面,我們可以通過這個介面獲取不同的物件,這些物件實現了同一系列的介面,所以他們可以用同乙個inte...