/// <summary>
/// The 'Flyweight' class.
/// </summary>
public class Character
{
// intrinsic state
protected char _symbol;
protected int _size;
protected string _font;
// extrinsic state
protected Position _position;
public void Display(Position position)
{
Console.WriteLine(
String.Format("Symbol: {0} Size: {1} Font: {2} Position: {3} {4}",
_symbol, _size, _font, position._x, position._y));
}
}
/// <summary>
/// A 'ConcreteFlyweight' class
/// </summary>
public class CharacterA : Character
{
public CharacterA()
{
_symbol = 'A';
_size = 10;
_font = "宋体";
//_position = new Position(0, 1);
}
}
/// <summary>
/// The 'FlyweightFactory' class
/// </summary>
public class CharacterFactory
{
// Keeps the character object by specifying key/value.
private Dictionary<char, Character> _characters =
new Dictionary<char, Character>();
public Character this[char key]
{
get
{
Character character = null;
// Checked the character whether existed or not,
// if the character existed, then directly returns,
// otherwise, instantiates a character object.
if (_characters.ContainsKey(key))
{
character = _characters[key];
}
else
{
string name = this.GetType().Namespace + "." +
"Character" + key.ToString();
character = Activator.CreateInstance(
Type.GetType(name)) as Character;
_characters.Add(key, character);
}
return character;
}
}
}
/// <summary>
/// The client.
/// </summary>
/// <param name="args">The args.</param>
static void Main(string[] args)
{
string text = "ABZABBZZ";
char[] letters = text.ToCharArray();
var characterFactory = new CharacterFactory();
// Creates random position ranges 0 to 100.
var rd = new Random();
foreach (char c in letters)
{
Character character = characterFactory[c];
var p = new Position(rd.Next(0, 100), rd.Next(0, 100));
character.Display(p);
}
Console.ReadKey();
}
联系客服