目的:在工廠類中選擇接口的實現(xiàn)類來實例化允瞧,功能模塊中不需要關(guān)心具體邏輯简软。
使用條件:已經(jīng)明確不同條件下創(chuàng)建相應(yīng)實例。
優(yōu)點:調(diào)用者只需要創(chuàng)建一個對象并調(diào)用述暂;擴展功能時也只需要擴展工廠類痹升;屏蔽接口的具體實現(xiàn),調(diào)用者只需要關(guān)心接口的調(diào)用畦韭。
注意:工廠模式與策略模式 差別在于此處是選擇對接實體疼蛾,而對接的接口功能是一致的。比如吃包子廊驼,工廠模式是選擇哪家店吃包子据过。而策略模式是選擇一家店之后,在那家店選擇吃什么妒挎。
設(shè)計場景如下:
我們撿到一只貓和一只狗绳锅,我們的目的是讓它們叫一聲。這時候我們輸入動物的種類來調(diào)用工廠類獲得動物對象酝掩,我們直接調(diào)用這個對象的Cry方法就可以了鳞芙。
golang代碼:
package factorypattern
import "fmt"
/*定義接口*/
type Animal interface {
Cry()
}
/*接口實現(xiàn)類1*/
type Dog struct {
}
/*接口實現(xiàn)類2*/
type Cat struct {
}
/*工廠類*/
type AnimalFactory struct {
}
/*實現(xiàn)類2實現(xiàn)接口的方法*/
func (Cat) Cry() {
fmt.Println("汪汪汪")
}
/*實現(xiàn)類1實現(xiàn)接口的方法*/
func (Dog) Cry() {
fmt.Println("喵喵喵")
}
/*工廠類方法實現(xiàn)*/
func (AnimalFactory) getAnimalObj(animalType string) (Animal){
var animal Animal
switch animalType {
case "cat":
animal = new(Cat)
break
case "dog":
animal = new(Dog)
break
default:
panic("no this kind animal")
}
return animal
}
/*測試*/
func Excute(){
new(AnimalFactory).getAnimalObj("cat").Cry()
new(AnimalFactory).getAnimalObj("dog").Cry()
}