技术开发 频道

老生常谈:小议.NET享元模式

  【IT168 技术文档】

  享元模式: 以共享的方式高效地支持大量的细粒度对象。

  享元对象的状态:
 
  1:内蕴状态(Internal State)内蕴状态存储在享元对象内部且不会随环境改变而改变。因此内蕴状态并可以共享。

  2:外蕴状态(External State)。外蕴状态是随环境改变而改变的、不可以共享的状态。享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。外蕴状态与内蕴状态是相互独立的。

  享元模式的应用条件:

  1: 一个系统有大量的对象。

  2:这些对象耗费大量的内存。

  3:这些对象的状态中的大部分都可以外部化。

  4:这些对象可以按照内蕴状态分成很多的组,当把外蕴对象从对象中剔除时,每一个组都可以仅用一个对象代替。

  5:软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。

  .NET的享元模式:
 
  .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:单纯享元模式;

  2:复合享元模式。 

0
相关文章