概述
享元模式是一种结构型设计模式,它通过共享已经存在的对象来减少要创建的对象数量,从而提高系统资源的利用率。在 Go 中,我们可以使用接口和结构体来实现享元模式。下面是一个简单的例子,其中我们定义了一个接口和两个结构体,然后使用工厂函数来创建这些结构体的实例。
package main
import "fmt"
type Flyweight interface {
Operation()
}
type ConcreteFlyweight struct {
state string
}
func (c *ConcreteFlyweight) Operation() {
fmt.Printf("ConcreteFlyweight: %s\n", c.state)
}
type FlyweightFactory struct {
flyweights map[string]Flyweight
}
func (f *FlyweightFactory) GetFlyweight(key string) Flyweight {
if flyweight, ok := f.flyweights[key]; ok {
return flyweight
}
flyweight := &ConcreteFlyweight{state: key}
f.flyweights[key] = flyweight
return flyweight
}
func main() {
factory := &FlyweightFactory{
flyweights: make(map[string]Flyweight),
}
flyweight := factory.GetFlyweight("hello")
flyweight.Operation()
flyweight = factory.GetFlyweight("world")
flyweight.Operation()
flyweight = factory.GetFlyweight("hello")
flyweight.Operation()
}
在上面的代码中,我们定义了一个 Flyweight 接口和一个具体的 ConcreteFlyweight 结构体。然后我们使用 FlyweightFactory 工厂函数来创建这些结构体的实例。如果传递给 GetFlyweight 的字符串已经存在于 flyweights 映射中,则返回该实例;否则,创建一个新实例并将其添加到映射中。
希望这可以帮助你编写你自己的享元模式!