工廠模式:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類
抽象工廠模式:為建立一組相關或相互依賴的物件提供乙個介面,而且無需指定他們的具體類
個人覺得這個區別在於產品,如果產品單一,最合適用工廠模式,但是如果有多個業務品種、業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。再通俗深化理解下:工廠模式針對的是乙個產品等級結構 ,抽象工廠模式針對的是面向多個產品等級結構的。
工廠方法模式 抽象工廠模式
針對的是乙個產品等級結構 針對的是面向多個產品等級結構
乙個抽象產品類 多個抽象產品類
可以派生出多個具體產品類 每個抽象產品類可以派生出多個具體產品類
乙個抽象工廠類,可以派生出多個具體工廠類 乙個抽象工廠類,可以派生出多個具體工廠類
每個具體工廠類只能建立乙個具體產品類的例項 每個具體工廠類可以建立多個具體產品類的例項
加減乘除四則運算器工廠模式舉例子
package main
import
"fmt"
type operation struct
type operationadd struct
func (op *operationadd)getresult()float64
type operationsub struct
func (sub *operationsub)getresult()float64
type operationmult struct
func (mult *operationmult)getresult()float64
type operationdivi struct //除法子類
func (divi *operationdivi)getresult()float64
type operationer inte***ce
type operationfactor struct
func (op *operationfactor)creatoperation(ope string,num1 float64,num2 float64)float64} //按照傳過來的符號來建立相應的物件
result=operationwho(add) //傳遞給多型的函式,直接呼叫
case
"-":
sub:=&operationsub}
result=operationwho(sub)
case
"*":
mult:=&operationmult}
result=operationwho(mult)
case
"/":
divi:=&operationdivi}
result=operationwho(divi)
}return result
}func operationwho(i operationer)float64
func main()}
//var iop operationer
//iop=m
//sum:=iop.getresult()
var op1 operationfactor //直接建立工廠類物件
sum:=op1.creatoperation("+"
,9,6) //直接呼叫工廠類的方法
fmt.println(sum)
var op2 operationfactor
sub:=op2.creatoperation("-"
,9,8)
fmt.println(sub)
var op3 operationfactor
mult:=op3.creatoperation("*"
,3,4)
fmt.println(mult)
var op4 operationfactor
div:=op4.creatoperation("/"
,9,10)
fmt.println(div)
}
在上面的例子當中,如果對物件導向沒有接觸的話可能會有一些不好理解,在go語言當中物件導向可能和別的語言有一些不同,go語言是利用匿名欄位來實現繼承,在上面的例子中多態函式的實現可以讓函式呼叫更加方便,比如每個結構體類都有10幾個甚至更多的函式,那麼直接都把這些函式封裝在多型的函式裡面,那麼每次呼叫直接傳遞乙個結構體類給多態函式就直接全部呼叫了,這樣就是很方便的 Go語言中物件導向
go語言中沒有明確的oop object oriented programming 概念。go語言只提供了兩個關鍵型別 struct,inte ce。1 struct與c 語言中的普通struct相似,在go語言中是借助著struct結構體才實現的 2 inte ce是抽象類的型別,inte ce則...
Go語言中的介面物件轉型
go語言中介面物件轉型,有2種方式。案例如下 myinte cechg project main.go package main import fmt math 1.定義乙個介面 type shape inte ce 2.矩形 type rectangle struct 3.三角形 type str...
GO語言中的介面
這幾天一直在看go語言知識,其中對介面的知識點有點模糊,所以整理一下。type 介面名 inte ce注意 介面裡的方法可以為空,也就是乙個空介面。下面舉個例子 定義people介面,有乙個說名字的方法 type people inte ce 宣告了乙個people型別的變數p var p peop...