设计模式之享元
http://www.cnblogs.com/saville/archive/2013/02/18/2916301.html
享元模式运用共享技术有效地支持大量细粒度的对象。例如可以对文档处理系统创建共享池,
在共享池中建立字母和代码的对应关系,这样就可以用共享池中的26个对象解决需要创建大量对象的问题。
Flyweight定义了享元接口,外部对象通过这个接口来访问具体的享元对象。
ConcreteFlyweight实现Flyweight接口,定义了具体的享元对象,并保存享元对象的内部状态。该享元对象是可共享的。
UnsharedConcreteFlyweight实现Flyweight接口,定义了不用于共享的享元对象。
FlyweightFactory创建并管理享元对象。
Client保存对享元接口的引用,通过该引用有效的使用具体的享元对象。
=========================================
public class FlyWeightMode
{
public FlyWeightMode() {
Character character = CharacterFactory.GetCharacter('a');
Console.WriteLine(character.ToString());
character = CharacterFactory.GetCharacter('b');
character.Size = 20;
character.Color = Color.Yellow;
Console.WriteLine(character.ToString());
character = CharacterFactory.GetCharacter('c');
character.Size = 20;
character.Color = Color.Red;
Console.WriteLine(character.ToString());
}
}
public enum Color {
Black,
Red,
Yellow
}
/// <summary>
/// 定义Flyweight。
/// </summary>
public abstract class Character
{
public int Size { get; set; }
public Color Color { get; set; }
protected char _c;
public Character() {
Size = 10;
Color = Color.Black;
}
public override string ToString()
{
return string.Format("Character is {0},Size is {1},Color is {2}",_c,Size,Color);
}
}
#region /*实现具体的享元对象。*/
public class CharacterA : Character {
public CharacterA() { _c = 'A'; }
}
public class CharacterB : Character
{
public CharacterB() { _c = 'B'; }
}
public class CharacterC : Character
{
public CharacterC() { _c = 'C'; }
}
#endregion /*================实现具体的享元对象。==============*/
//定义FlyweightFactory并建立共享池。
public static class CharacterFactory {
private static Dictionary<char, Character> _character;
static CharacterFactory() {
_character = new Dictionary<char, Character>();
_character.Add('a', new CharacterA());
_character.Add('b', new CharacterB());
_character.Add('c', new CharacterC());
}
public static Character GetCharacter(char c) {
return _character[c];
}
}
浙公网安备 33010602011771号