工厂方法模式

package factory

import "design/desp/models"

// 工厂方法模式

const (
	ProductTechBook = iota
	ProductDailyBriefs
)

type ProductType int

type IProductFactory interface {
	CreateProduct(t ProductType) IProduct
}

type IProduct interface {
	GetInfo() string
}

type TechFactory struct{}

func (*TechFactory) CreateProduct(t ProductType) IProduct {
	switch t {
	case ProductTechBook:
		return &models.Book{}
	}
	return nil
}

type DailyFactory struct{}

func (*DailyFactory) CreateProduct(t ProductType) IProduct {
	switch t {
	case ProductDailyBriefs:
		return &models.Briefs{}
	}
	return nil
}
package models

type Book struct {
	Id       int
	BookName string
}

func (this *Book) GetInfo() string {
	return "book"
}

type Briefs struct {
	Id   int
	Size string
}

func(this * Briefs) GetInfo() string {
    return "内裤"
}
package factory

import (
	"fmt"
	"testing"
)

func TestTechBook(t *testing.T) {
	info := new(TechFactory).CreateProduct(ProductTechBook).GetInfo()
	fmt.Println(info)
}

func TestDailyFactory(t *testing.T) {
	info := new(DailyFactory).CreateProduct(ProductDailyBriefs).GetInfo()
	fmt.Println(info)
}

最后更新于