一分钟编程--golang实现享元模式

41 阅读1分钟

概述

享元模式是一种结构型设计模式,它通过共享已经存在的对象来减少要创建的对象数量,从而提高系统资源的利用率。在 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 映射中,则返回该实例;否则,创建一个新实例并将其添加到映射中。

希望这可以帮助你编写你自己的享元模式!