概念
享元模式(FlyWeight):运用共享技术有效地支持大量细粒度的对象。
需求
利用享元模式减少相似网站的实例
UML图
代码
网站接口和具体网站类
type WebSite interface {
Use(user User)
}
type ConcreteWebsite struct {
Name string
}
func (c ConcreteWebsite) Use(user User) {
fmt.Printf("网站分类:%v 用户:%v\n", c.Name, user.Name)
}
网站工厂
type WebSiteFactory struct {
Hashmap map[string]interface{}
}
func (f *WebSiteFactory) GetWebSiteCategory(key string) WebSite {
if _, ok := f.Hashmap[key]; !ok {
f.Hashmap[key] = ConcreteWebsite{Name: key}
}
return f.Hashmap[key].(WebSite)
}
func (f *WebSiteFactory) GetWebSiteCount() int {
return len(f.Hashmap)
}
用户类
type User struct {
Name string
}
测试
//享元模式
f := flyweightPattern.WebSiteFactory{Hashmap: make(map[string]interface{})}
fx := f.GetWebSiteCategory("产品展示")
fx.Use(flyweightPattern.User{Name: "小菜"})
fy := f.GetWebSiteCategory("产品展示")
fy.Use(flyweightPattern.User{Name: "大鸟"})
fz := f.GetWebSiteCategory("产品展示")
fz.Use(flyweightPattern.User{Name: "娇娇"})
fl := f.GetWebSiteCategory("博客")
fl.Use(flyweightPattern.User{Name: "老顽童"})
fm := f.GetWebSiteCategory("博客")
fm.Use(flyweightPattern.User{Name: "桃谷六仙"})
fn := f.GetWebSiteCategory("博客")
fn.Use(flyweightPattern.User{Name: "南海鳄神"})
fmt.Println(f.GetWebSiteCount())