抽象工厂方法模式是一种创建型设计模式,它提供了一种方式,用于创建一系列相关或相互依赖的对象,而不需要指定它们具体的类。这种模式通过定义一个创建对象的接口,允许客户端使用这个接口来创建各种产品,而不需要知道具体的类。
下面是一个使用Go语言实现的抽象工厂方法模式示例,我们将创建一个家具工厂,用于生产不同类型的家具。
package main
import "fmt"
// 抽象产品:家具接口
type Furniture interface {
Describe() string
}
// 具体产品:椅子
type Chair struct{}
func (c Chair) Describe() string {
return "This is a chair."
}
// 具体产品:桌子
type Table struct{}
func (t Table) Describe() string {
return "This is a table."
}
// 具体产品:沙发
type Sofa struct{}
func (s Sofa) Describe() string {
return "This is a sofa."
}
// 抽象工厂:家具工厂接口
type FurnitureFactory interface {
CreateChair() Furniture
CreateTable() Furniture
CreateSofa() Furniture
}
// 具体工厂:现代家具工厂
type ModernFurnitureFactory struct{}
func (m ModernFurnitureFactory) CreateChair() Furniture {
return Chair{}
}
func (m ModernFurnitureFactory) CreateTable() Furniture {
return Table{}
}
func (m ModernFurnitureFactory) CreateSofa() Furniture {
return Sofa{}
}
// 具体工厂:古典家具工厂
type ClassicFurnitureFactory struct{}
func (c ClassicFurnitureFactory) CreateChair() Furniture {
return Chair{} // 可以替换为古典椅子
}
func (c ClassicFurnitureFactory) CreateTable() Furniture {
return Table{} // 可以替换为古典桌子
}
func (c ClassicFurnitureFactory) CreateSofa() Furniture {
return Sofa{} // 可以替换为古典沙发
}
func main() {
// 创建现代家具工厂
modernFactory := ModernFurnitureFactory{}
modernChair := modernFactory.CreateChair()
modernTable := modernFactory.CreateTable()
modernSofa := modernFactory.CreateSofa()
fmt.Println(modernChair.Describe())
fmt.Println(modernTable.Describe())
fmt.Println(modernSofa.Describe())
// 创建古典家具工厂
classicFactory := ClassicFurnitureFactory{}
classicChair := classicFactory.CreateChair()
classicTable := classicFactory.CreateTable()
classicSofa := classicFactory.CreateSofa()
fmt.Println(classicChair.Describe())
fmt.Println(classicTable.Describe())
fmt.Println(classicSofa.Describe())
}
在这个示例中,我们定义了一个Furniture
接口,它有一个Describe
方法。然后我们创建了三个具体产品:Chair
、Table
和Sofa
,它们都实现了Furniture
接口。FurnitureFactory
是家具工厂接口,它有三个方法CreateChair
、CreateTable
和CreateSofa
,用于创建不同类型的家具实例。
ModernFurnitureFactory
和ClassicFurnitureFactory
是具体工厂,它们分别实现了FurnitureFactory
接口,用于创建现代和古典风格的家具。在main
函数中,我们通过工厂创建了不同风格的家具,并调用它们的Describe
方法。
如果您喜欢我的文章,请点击下面按钮随意打赏,您的支持是我最大的动力。
最新评论