测试代码
代码
4-1
// 测试代码
package demo4_1
import (
"fmt"
"testing"
)
// 直接创建产品
func TestProduct_Create(t *testing.T) {
product1 := Product1{} // 创建产品1
product1.SetName("p1") // 给产品1设置名称
name := product1.GetName() // 获取产品1名称
fmt.Println(name)
product2 := Product2{}
product2.SetName("p2")
name2 := product1.GetName()
fmt.Println(name2)
}
// 简单工厂方式创建
func TestProductFactory_Create(t *testing.T) {
factory := ProductFactory{} //定义产品工厂,待工厂生产指定类型产品
product1 := factory.Create(p1) // 工厂根据指定,生产产品1
product1.SetName("p1") // 给产品1设置名称
name := product1.GetName() // 获取产品1名称
fmt.Println(name)
product2 := factory.Create(p2)
product2.SetName("p2")
name2 := product2.GetName()
fmt.Println(name2)
}
// 课程代码
package demo4_1
// Product 实现一个产品抽象
type Product interface {
SetName(name string) // 设置产品名称
GetName() string // 获取产品名称
}
// Product1 实现具体的产品:产品1,他有两个方法
type Product1 struct {
Name string // 产品1的名称
}
// SetName 设置产品名称
func (p1 *Product1) SetName(name string) {
p1.Name = name
}
// GetName 获取产品名称
func (p1 *Product1) GetName() string {
return "产品1的name为:" + p1.Name
}
// Product2 实现具体的产品:产品2,他有两个方法
type Product2 struct {
Name string // 产品1的名称
}
// SetName 设置产品名称
func (p2 *Product2) SetName(name string) {
p2.Name = name
}
// GetName 获取产品名称
func (p2 *Product2) GetName() string {
return "产品1的name为:" + p2.Name
}
type productType int // 产品类型变量
const (
p1 productType = iota // 0
p2 // 1
)
// ProductFactory 实现简单工厂类
type ProductFactory struct {
}
// Create 产品工厂根据传入的产品类型,创建出具体产品实现。
func (pf *ProductFactory) Create(productType productType) Product {
if productType == p1 {
return &Product1{}
}
if productType == p2 {
return &Product2{}
}
return nil
}
笔记在哪里