黑马程序员技术交流社区

标题: 享元模式 [打印本页]

作者: yunqiangshan    时间: 2011-12-26 23:41
标题: 享元模式
本帖最后由 yunqiangshan 于 2011-12-27 10:23 编辑

享元模式的概念不是很清晰,求详细定义,最好能带点简单的事例
作者: 马新乐    时间: 2011-12-26 23:55
享元模式:以共享的方式高效地支持大量的细粒度对象。
享元对象的状态:
        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的值相同,但是它们的引用是不同的。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2