当我过去这样做时,我明确地将享元作为常量引用。
然后我们显式定义引用享元的数据结构的构造函数来使用共享资源。
使用来自维基百科的标准奶酪店模型:
struct CheeseSupplier
stock::Dict{String,Float64}
CheeseSupplier() = new(Dict())
end
stock(supplier, name, price) = supplier.stock[name] = price
const supplier = CheeseSupplier()
struct CheeseShop
orders::Dict{String,Int64}
supplier::CheeseSupplier
CheeseShop() = new(Dict(), supplier)
end
totalincome(shop) = foldl((x,(k,v)) -> x + shop.supplier.stock[k]*v, shop.orders; init=0)
function sell(shop, name, amount)
haskey(shop.supplier.stock, name) || error("Supplier doesn't have $(name)")
shop.orders[name] = get(shop.orders, name, 0) + amount
end
shop1 = CheeseShop()
shop2 = CheeseShop()
stock(supplier, "blue", 3.75)
sell(shop1, "blue", 3)
sell(shop2, "blue", 8)