享元模式:以共享的方式高效地支持大量的细粒度对象。
享元对象的状态:
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的值相同,但是它们的引用是不同的。
|