{
public class CloneableManager
{
public static CloneableManager GetInstance()
{
return Handle.mananger;
}
private Dictionary<CloneInstanceType, ICloneable> dictCloneable = new Dictionary<CloneInstanceType, ICloneable>();
public CloneableManager()
{
Table _table = new Table();
_table.TableId = 10;
TablePlayer _player = new TablePlayer();
_player.CurrentTable = _table;
this.dictCloneable.Add(CloneInstanceType.TablePlayer, _player);
}
public ICloneable GetCloneableByKey(CloneInstanceType _key)
{
if (!this.dictCloneable.ContainsKey(_key))
{
return null;
}
return (ICloneable)this.dictCloneable[_key].Clone();
}
public class Handle
{
public static CloneableManager mananger = new CloneableManager();
}
}
}
namespace CloneableDesignModel
{
public enum CloneInstanceType
{
None = 0,
TablePlayer = 1,
}
}
namespace CloneableDesignModel
{
public class TablePlayer:ICloneable
{
public Table CurrentTable;
public TablePlayer(Table _currenTable)
{
this.CurrentTable = (Table)_currenTable.Clone();
}
public TablePlayer()
{
}
public string Name
{
get;
set;
}
public string Id
{
get;
set;
}
public long Coin
{
get;
set;
}
#region ICloneable Member
public object Clone()
{
//return (object)this.MemberwiseClone();
TablePlayer _player = new TablePlayer(this.CurrentTable);
return _player;
}
#endregion
}
}
namespace CloneableDesignModel
{
public class PlayerCollection:List<TablePlayer>
{
}
}
namespace CloneableDesignModel
{
public class Table:ICloneable
{
public int TableId;
#region ICloneable Members
public object Clone()
{
return (object)this.MemberwiseClone();
}
#endregion
}
}
namespace CloneableDesignModel
{
public class PlayersData
{
public static string[] Names = { "aaa", "bbb", "ccc"};
public static string[] Codes = { "001","002","003"};
public static int[] Coins = { 100,200,300};
}
}
namespace CloneableDesignModel
{
class Program
{
static void Main(string[] args)
{
try
{
PlayerCollection playerCollection = new PlayerCollection();
for (int i = 0; i < 3; i++)
{
TablePlayer _player = (TablePlayer)CloneableManager.GetInstance().GetCloneableByKey(CloneInstanceType.TablePlayer);
if(i==0)
{
_player.CurrentTable.TableId = 100;
}
if (i == 1)
{
_player.CurrentTable.TableId = 200;
}
if (i == 2)
{
_player.CurrentTable.TableId = 300;
}
_player.Name = PlayersData.Names[i];
_player.Id = PlayersData.Codes[i];
_player.Coin = PlayersData.Coins[i];
playerCollection.Add(_player);
Console.WriteLine(_player.CurrentTable.TableId);
}
foreach(TablePlayer _player in playerCollection)
{
Console.WriteLine("{0} {1} {2} {3}", _player.Name, _player.Id, _player.Coin, _player.CurrentTable.TableId);
}
}
catch(Exception _ex)
{
Console.WriteLine(_ex.Message);
}
}
}
}