原型模式

浅拷贝是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝。例如,若是一个对象有一个指向字符串的字段,而且咱们对该对象作了一个浅拷贝,那么这两个对象将引用同一个字符串,而深拷贝是对对象实例中字段引用的对象也进行拷贝,若是一个对象有一个指向字符串的字段,而且咱们对该对象进行了深拷贝的话,那么咱们将建立一个对象和一个新的字符串,新的对象将引用新的字符串。也就是说,执行深拷贝建立的新对象和原来对象不会共享任何东西,改变一个对象对另一个对象没有任何影响,而执行浅拷贝建立的新对象与原来对象共享成员,改变一个对象,另一个对象的成员也会改变。其实原型模式就是浅拷贝的一个应用。ide

///火影忍者中鸣人的影分身和孙悟空的的变都是原型模式
    class Client
    {
        static void Main(string[] args)
        {
            // 孙悟空 原型
            MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing");
            // 变一个
            MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() as ConcretePrototype;
            Console.WriteLine("Cloned1:\t"+cloneMonkeyKing.Id);
            // 变两个
            MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype;
            Console.WriteLine("Cloned2:\t" + cloneMonkeyKing2.Id);
            Console.ReadLine();
        }
    }
    /// <summary>
    /// 孙悟空原型
    /// </summary>
    public  abstract class MonkeyKingPrototype
    {
        public string Id { get; set; }
        public MonkeyKingPrototype(string id)
        {
            this.Id = id;
        }
        // 克隆方法,即孙大圣说“变”
        public abstract MonkeyKingPrototype Clone();
    }
    /// <summary>
    /// 建立具体原型
    /// </summary>
    public class ConcretePrototype : MonkeyKingPrototype
    {
        public ConcretePrototype(string id)
            : base(id)
        { }
        /// <summary>
        /// 浅拷贝
        /// </summary>
        /// <returns></returns>
        public override MonkeyKingPrototype Clone()
        {
            // 调用MemberwiseClone方法实现的是浅拷贝,另外还有深拷贝
            return (MonkeyKingPrototype)this.MemberwiseClone();
        }
    }
实例代码
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息