C# 原型模式小试牛刀

namespace CloneableDesignModel
{
    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);
            }
        }
    }
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值