1.写在前面的
在文章开始之前,先写一些废话,不知不觉把重温设计模式写完了五篇。
下面的文章,算是对以上五篇文章的一个阶段性总结和反省。
首先,我得特别感谢winter-cn不厌其烦地指出我在设计模式应用中的一个又一个错误,如果没有他,很多东西我还是会继续地错下去。
另外,也感谢博客园众多园友对我的鼓励,让我有勇气再次写下去。
2.步入正题1——享元模式
享元模式运用共享技术有效地支持了大量细粒度的对象,解决了大量对象造成的内存开销问题。
何时采用享元模式:
在这里我补充两个很重要的概念:内蕴状态和外蕴状态。内蕴状态是共享对象中被所有对象所共享的东西,而外蕴状态是由外部调用者传进去的东西。
我们这里就借助Word文档的例子来说明这两个概念,转了一圈,再次回到GOF:
在一篇文章中,一共只有26个字母,但是这篇文章却可能有几万个字。那么这个时候,我们就可以用享元模式来解决问题。
这个时候什么是内蕴状态?什么是外蕴状态?
内蕴状态被所有调用者所共享,也就是那26个字母。
而外蕴状态呢?就是每个字符所不可能不同的字体。看清楚,是可能不同。
如果写成示例代码:
class Character
{
char c;
Font f;
private List<Font> fontList;
public Font F
{
set
{
int i = 0;
for (i = 0; i < fontList.Count; i++)
{
if (fontList[i].Equals(value))
{
this.f = fontList[i];
break;
}
}
fontList.Add(value);
f = value;
}
}
}
class Font
{
string fontName;
string color;
int size;
// and so on;
}