工厂模式

  • 工厂模式的解释:工厂模式是一种创建型模式,主要用于创建对象使用。

  • 工厂模式的用法:提供一个公共的方法根据所传入的不同参数提供不同的对象(结构体)。例如有一个创建动物的方法,如果参数是猫就创建猫的结构体,如果是狗就创建狗的结构体。

  • 工厂模式的好处:可以把一些结构体对象统一创建管理,减少重复性代码,将达软件开发当中的耦合。

    • 普通工厂模式
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
}
  • 代码说明:

    1. 这个代码非常简单,一个原因就是以后用的时候如果忘记的化可以非常方便的重新掌握
    2. 工厂方法返回的是一个接口,相当于用了java中的多态,因此无法访问结构体当中的字段
    3. 如果要访问结构体当中的字段可以在接口中定义结构体字段的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{}
}
//后面创建小动物的方法和上面两个方法一样。
posted @ 2020-11-08 21:39  月下繁星杨  阅读(106)  评论(0编辑  收藏  举报