工厂模式
-
工厂模式的解释:工厂模式是一种创建型模式,主要用于创建对象使用。
-
工厂模式的用法:提供一个公共的方法根据所传入的不同参数提供不同的对象(结构体)。例如有一个创建动物的方法,如果参数是猫就创建猫的结构体,如果是狗就创建狗的结构体。
-
工厂模式的好处:可以把一些结构体对象统一创建管理,减少重复性代码,将达软件开发当中的耦合。
- 普通工厂模式
type cat struct {
CatName string
}
type dog struct{
DogName string
}
type Animal interface {
Say()
}
func (catfactory *cat)Say() {
fmt.Println("喵喵喵。。。")
}
func (dogfactory *dog)Say() {
fmt.Println("汪汪汪。。。")
}
func Factory(factory string) Animal{
if factory!=""{
switch factory {
case "dog":
return &dog{}
case "cat":
return &cat{}
}
}
return nil
}
-
代码说明:
- 这个代码非常简单,一个原因就是以后用的时候如果忘记的化可以非常方便的重新掌握
- 工厂方法返回的是一个接口,相当于用了java中的多态,因此无法访问结构体当中的字段
- 如果要访问结构体当中的字段可以在接口中定义结构体字段的Get/Set方法。就是这样麻烦一点吧。
-
抽象工厂模式
- 说明:这个东西用的比较少,把一些具有相同属性的结构体的创建方法放在一个接口中:比如大猫和大狗是大动物,小猫和小狗是小动物。概念比较绕
- 代码如下
//大狗结构体
type dogAbstratBig struct {
}
//小狗结构体
type dogAbstractSmall struct {
}
//大猫结构体
type catAbstratBig struct {
}
//小猫结构体
type catAbstractSmall struct {
}
type AnimalAbstract interface {
Run()
}
func (e catAbstractSmall)Run() {
fmt.Println("小猫开始跑了")
}
func (e catAbstratBig)Run() {
fmt.Println("小猫开始跑了")
}
func (e dogAbstractSmall)Run() {
fmt.Println("小猫开始跑了")
}
func (e dogAbstratBig)Run() {
fmt.Println("小猫开始跑了")
}
//创建猫和狗的接口方法
type AnimalFactory interface {
CreateDog()
CreateCat()
}
type BigAnimalFactory struct {
}
type SmallAnimalFactory struct {
}
func (big *BigAnimalFactory) CreateDog(s string) AnimalAbstract{
fmt.Println(s)
return &dogAbstratBig{}
}
func (small * BigAnimalFactory) CreateCat() AnimalAbstract{
return &dogAbstractSmall{}
}
//后面创建小动物的方法和上面两个方法一样。