• 大话设计-原型模式


    克隆的深复制,浅复制。引用类型涉及深复制,深复制要考虑深几层,有没有可能出现死循环。

    using System;
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                Resume a = new Resume("大鸟");
                a.SetPersonalInfo("", "24");
                a.SetWorkExperience("1998-2020", "XX公司");
                Resume b = (Resume)a.Clone();
                b.SetWorkExperience("2020-2006", "YY企业");
                Resume c = (Resume)a.Clone();
                c.SetWorkExperience("2012-2300", "ZZ企业");
    
                a.Display();
                b.Display();
                c.Display();
    
                Console.Read();
            }
        }
    
        class WorkExperience : ICloneable
        {
            public object Clone()
            {
                // 浅复制
                return this.MemberwiseClone();
            }
    
            private string workDate;
    
            public string WorkDate
            {
                get { return workDate; }
                set { workDate = value; }
            }
    
            private string company;
    
            public string Company
            {
                get { return company; }
                set { company = value; }
            }
        }
    
        class Resume : ICloneable
        {
            private string name;
            private string sex;
            private string age;
    
            private WorkExperience work;
    
            private Resume(WorkExperience work)
            {
                // 深复制
                this.work = (WorkExperience)work.Clone();
            }
    
            public Resume(string name)
            {
                this.name = name;
                this.work = new WorkExperience();
            }
    
            public void SetPersonalInfo(string sex, string age)
            {
                this.sex = sex;
                this.age = age;
            }
    
            public void SetWorkExperience(string workDate, string company)
            {
                this.work = new WorkExperience();
                this.work.WorkDate = workDate;
                this.work.Company = company;
            }
    
            public void Display()
            {
                Console.WriteLine("{0},{1},{2}", name, sex, age);
                Console.WriteLine("工作经历:{0},{1}", work.WorkDate, work.Company);
            }
    
            public Object Clone()
            {
                Resume obj = new Resume(this.work);
                obj.name = this.name;
                obj.sex = this.sex;
                obj.age = this.age;
                return obj;
            }
        }
    }
  • 相关阅读:
    移动端图片按比例裁剪
    bootstrap悬停下拉菜单显示
    videojs兼容ie8
    ie浏览器不支持多行隐藏显示省略号
    rem和px
    浏览器默认返回,页面刷新
    centos src compile gcc 7.3
    docker与gosu
    centos 安装 kernel
    docker proxy
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/clone.html
Copyright © 2020-2023  润新知