Golang 设计模式之二工厂方法模式

1、定义

工厂模式(Factory Pattern)是最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

2、场景描述

黑猫妈妈(BlackCatMother) 生出来的猫是小黑猫(BlackCat)
白猫妈妈(WhiteCatMother) 生出来的猫是小白猫(WhiteCat)
猫妈妈都有一个 “生(GiveBirth)” 的行为
现在有个宠物医院(PetHospital)辅助猫妈妈生产(调用猫妈妈的GiveBirth方法)生出小猫(Cat)
送进出黑猫妈妈生出小黑猫
送进去白猫妈妈生出小白猫

3、代码实现

type Cat interface {
	Miao()
}

type CatMother interface {
	GiveBirth() Cat
}

type BlackCatMother struct{}

func (*BlackCatMother) GiveBirth() Cat {
	return &BlackCat{}
}

type BlackCat struct{}

func (*BlackCat) Miao() {
	fmt.Println("我是一只小黑猫")
}

type WhiteCatMother struct{}

func (*WhiteCatMother) GiveBirth() Cat {
	return &WhiteCat{}
}

type WhiteCat struct{}

func (*WhiteCat) Miao() {
	fmt.Println("我是一只小白猫")
}

func PetHospital(catMother CatMother) Cat {
	cat := catMother.GiveBirth()
	return cat
}

4、具体调用

func main() {
        //送黑猫妈妈进宠物医院生出小黑猫
	cat1 := PetHospital(&BlackCatMother{})
	cat1.Miao()
        //送白猫妈妈进宠物医院生出小白猫
	cat2 := PetHospital(&WhiteCatMother{})
	cat2.Miao()
}

5、简单说明

实际生产项目中 实现方法可能包含一些输入数据可将数据字段打包成结构体以匿名字段的形式组合到操作结构体中

posted @ 2020-12-26 12:33  斯文哥哥  阅读(67)  评论(0)    收藏  举报