zoukankan      html  css  js  c++  java
  • 原型模式

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

    ///火影忍者中鸣人的影分身和孙悟空的的变都是原型模式
        class Client
        {
            static void Main(string[] args)
            {
                // 孙悟空 原型
                MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing");
                // 变一个
                MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() as ConcretePrototype;
                Console.WriteLine("Cloned1:	"+cloneMonkeyKing.Id);
                // 变两个
                MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype;
                Console.WriteLine("Cloned2:	" + 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();
            }
        }
    实例代码
  • 相关阅读:
    WPF 调用WINForm中的ColorDialog
    WPF 获取ControlTemplate 中的控件方法
    <转> 8个超棒的免费高质量图标搜索引擎
    WPF 右键菜单动画
    WPF 创建超级连接
    WPF 数据模板的切换简单事例
    WPF 关于ShowDialog后主窗体依然能响应键盘输入法的解决方案。
    <转>强制类型转换总结
    WPF 中的MessageBox返回值获取并判断
    WPF数据绑定实现自定义数据源
  • 原文地址:https://www.cnblogs.com/lizhizhang/p/6349843.html
Copyright © 2011-2022 走看看