2727551894

导航

 

【设计模式】 原型

 1.  以一个对象为原型, 通过复制原型创建新的对象

 2. 适用场景 :

  a .  需要创建多个对象,且对象间只有个别属性需要改变, 使用原型可减少创建对象的开销

 3. 代码 

    class Prototype
    {
        public static void Test()
        {
            var m = new Model() { ModelName = "MN" };
            var v1 = new PrototypeModel { Name = "v1", Model = m };
            var v2 = v1.Clone(); // 浅表克隆, 如 v2 的 Model 只复制了 v1 的引用。 深表克隆得手动复制属性
            v2.SetName("v2");
            v2.SetModelName("m2");
            Console.WriteLine(v2.Name + ":" + v2.Model.ModelName);
            Console.WriteLine(v1.Name + ":" + v1.Model.ModelName);
        }
    }

    internal class PrototypeModel
    {
        public string Name { get; set; }

        public Model Model { get; set; }
        public void SetName(string name)
        {
            this.Name = name;
        }

        public void SetModelName(string name)
        {
            if (Model != null)
            {
                Model.ModelName = name;
            }
        }

        public PrototypeModel Clone()
        {
            return (PrototypeModel)this.MemberwiseClone();
        }
    }

    internal class Model
    {
        public string ModelName { get; set; }
    }

 

posted on 2015-01-05 16:04  xmj112288  阅读(100)  评论(0编辑  收藏  举报