结构型---享元模式

举报
斌哥来了 发表于 2021/07/29 10:51:35 2021/07/29
【摘要】 // 享元类包含一个树的部分状态。这些成员变量保存的数值对于特定树而言是唯一 // 的。例如,你在这里找不到树的坐标。但这里有很多树木之间所共有的纹理和颜 // 色。由于这些数据的体积通常非常大,所以如果让每棵树都其进行保存的话将耗 // 费大量内存。因此,我们可将纹理、颜色和其他重复数据导出到一个单独的对象 // 中,然后让众多的单个树对象去引用它。 class ...















// 享元类包含一个树的部分状态。这些成员变量保存的数值对于特定树而言是唯一

// 的。例如,你在这里找不到树的坐标。但这里有很多树木之间所共有的纹理和颜

// 色。由于这些数据的体积通常非常大,所以如果让每棵树都其进行保存的话将耗

// 费大量内存。因此,我们可将纹理、颜色和其他重复数据导出到一个单独的对象

// 中,然后让众多的单个树对象去引用它。

class TreeType is

field name

field color

field texture

constructor TreeType ( name , color , texture ) { ... }

method draw ( canvas , x , y ) is

// 1. 创建特定类型、颜色和纹理的位图。

// 2. 在画布坐标 (X,Y) 处绘制位图。


// 享元工厂决定是否复用已有享元或者创建一个新的对象。

class TreeFactory is

static field treeTypes : collection of tree types

static method getTreeType ( name , color , texture ) is

type = treeTypes . find ( name , color , texture )

if ( type == null )

type = new TreeType ( name , color , texture )

treeTypes . add ( type )

return type


// 情景对象包含树状态的外在部分。程序中可以创建数十亿个此类对象,因为它们

// 体积很小:仅有两个整型坐标和一个引用成员变量。

class Tree is

field x , y

field type : TreeType

constructor Tree ( x , y , type ) { ... }

method draw ( canvas ) is

type . draw ( canvas , this . x , this . y )


// 树( Tree )和森林( Forest )类是享元的客户端。如果不打算继续对树类进行开

// 发,你可以将它们合并。

class Forest is

field trees : collection of Trees


method plantTree ( x , y , name , color , texture ) is

type = TreeFactory . getTreeType ( name , color , texture )

tree = new Tree ( x , y , type )

trees . add ( tree )


method draw ( canvas ) is

foreach ( tree in trees ) do

tree . draw ( canvas )











【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。