工厂方法模式

工厂方法模式(英语:Factory method pattern)是一种实现了"工厂"概念的面向对象设计模式。
就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。
工厂方法模式的实质是"定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。"

对比简单工厂:简单工厂没有对工厂抽象,一个工厂生产不同产品;工厂方法对工厂进行抽象,不同工厂生产想通产品,但是做法等是不同的。

type FactoryInterface interface {
   GenerateProduct(string) ProductInterface
}

type ProductInterface interface {
   Create()
}

type FactoryOne struct {
}

func (f FactoryOne) GenerateProduct(t string) ProductInterface {
   switch t {
   case "man":
      return ProductManOne{}
   case "woman":
   }
   return nil
}

type ProductManOne struct {
}

func (p ProductManOne) Create() {
   println("100元男装")
}

type FactoryTwo struct {
}

func (f FactoryTwo) GenerateProduct(t string) ProductInterface {
   switch t {
   case "man":
      return ProductManTwo{}
   case "woman":
   }
   return nil
}

type ProductManTwo struct {
}

func (p ProductManTwo) Create() {
   println("200元男装")
}

使用

func TestFactoryMethod(t *testing.T) {
    new(FactoryOne).GenerateProduct("man").Create()
    new(FactoryTwo).GenerateProduct("man").Create()
}