日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

设计模式--工厂方法(Factory Method)模式

發(fā)布時(shí)間:2025/3/21 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--工厂方法(Factory Method)模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

模式定義

定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個(gè)類,使得一個(gè)類的實(shí)例化延遲到子類

類圖

應(yīng)用場景

1.當(dāng)你不知道該使用對象的確切類型的時(shí)候;

2.當(dāng)你希望為庫或框架提供擴(kuò)展其內(nèi)部組件的方法時(shí)。

主要優(yōu)點(diǎn)

1.將具體產(chǎn)品和創(chuàng)建者解耦;

2.符合單一職責(zé)原則;

3.符合開閉原則。

要點(diǎn)總結(jié)

  • Factory Method模式用于隔離類對象的使用者和具體類型之間的耦合關(guān)系。面對一個(gè)經(jīng)常變化的具體類型,緊耦合關(guān)系(new)會導(dǎo)致軟件的脆弱
  • Factory Method模式通過面向?qū)ο蟮氖址?#xff0c;將所要創(chuàng)建的具體對象工作延遲到子類,從而實(shí)現(xiàn)一種擴(kuò)展(而非更改)的策略,較好地解決了這種緊耦合關(guān)系
  • Factory Method模式解放了“單個(gè)對象”的需求變化,缺點(diǎn)在于要求創(chuàng)建方法、參數(shù)相同

Go語言實(shí)現(xiàn)

工程目錄

OperatorFactory.go

package Factory//實(shí)際運(yùn)行類的接口 type Operator interface {SetLeft(int)SetRight(int)Result() int }//工廠接口 type OperatorFactory interface {Create() Operator }

OperatorData.go

package Factory//數(shù)據(jù) type OperatorData struct {left, right int }//賦值 func (op *OperatorData) SetLeft(left int) {op.left = left }func (op *OperatorData) SetRight(right int) {op.right = right }

PlusOpertaorFactory.go

package Factory//操作的抽象 type PlusOpertaorFactory struct {}//操作類中包含操作數(shù) type PlusOpertaor struct {*OperatorData }//實(shí)際運(yùn)行方法 func(o PlusOpertaor) Result() int {return o.right + o.left } func(PlusOpertaorFactory) Create() Operator {return &PlusOpertaor{&OperatorData{}} }

SubOpertaorFactory.go

package Factory//操作的抽象 type SubOpertaorFactory struct {}//操作類中包含操作數(shù) type SubOpertaor struct {*OperatorData }//實(shí)際運(yùn)行方法 func(o SubOpertaor) Result() int {return o.left - o.right } func(SubOpertaorFactory) Create() Operator {return &SubOpertaor{&OperatorData{}} }

factory_test.go

package Factoryimport ("fmt""testing" )func TestOpertaorFactory(t *testing.T) {var fac OperatorFactoryfac = PlusOpertaorFactory{}op := fac.Create()op.SetLeft(20)op.SetRight(10)fmt.Println(op.Result())fac = SubOpertaorFactory{}op = fac.Create()op.SetLeft(30)op.SetRight(20)fmt.Println(op.Result()) }

總結(jié)

以上是生活随笔為你收集整理的设计模式--工厂方法(Factory Method)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。