A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yunqiangshan 黑马帝   /  2011-12-26 23:41  /  1743 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yunqiangshan 于 2011-12-27 10:23 编辑

享元模式的概念不是很清晰,求详细定义,最好能带点简单的事例

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

1 个回复

倒序浏览
享元模式:以共享的方式高效地支持大量的细粒度对象。
享元对象的状态:
        1:内蕴状态(Internal State)内蕴状态存储在享元对象内部且不会随环境改变而改变。因此内蕴状态并可以共享。
        2:外蕴状态(External State)。外蕴状态是随环境改变而改变的、不可以共享的状态。享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。外蕴状态与内蕴状态是相互独立的。
享元模式的应用条件:
        1: 一个系统有大量的对象。
        2:这些对象耗费大量的内存。
        3:这些对象的状态中的大部分都可以外部化。
        4:这些对象可以按照内蕴状态分成很多的组,当把外蕴对象从对象中剔除时,每一个组都可以仅用一个对象代替。
        5:软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。
.NET中的String类型就是运用了享元模式。.NET中如果第一次创建了一个字符串对象s1,下次再创建相同的字符串s2时只是把它的引用指向s1所引用的具体对象,这就实现了相同字符串在内存中的共享。下面的程序来演示s1和s2的引
用是否一致: 输出的结果为True。
string s1 = "测试字符串一";
string s2 = "测试字符串一";
Console.WriteLine(Object.ReferenceEquals(s1, s2));
注意:如果再有一个字符串s3,它的初始值为“测试字符串”,再对它进行操作s3 = s3 + “一”,这时虽然s1和s3的值相同,但是它们的引用是不同的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马