• 设计模式学习笔记——原型模式(Prototype)


    1.特点:在初始化信息不发生变化时考虑。

    2.概念:通过复制一个已经存在的实例来创建一个新的实例。被复制的实例被称为原型,这个原型是可定制的。

    3.类图:

    4.程序实现:

    /// <summary>
        /// 实现了ICloneable接口的简历类
        /// </summary>
        public class Resume:ICloneable
        {
            public Resume()
            {
                mWorkExperience = new WorkExperience();
            }
    
            private string mName;
            private string mSex;
            private int mAge;
            private WorkExperience mWorkExperience;
    
            public string Name
            {
                get { return mName; }
                set { mName = value; }
            }
    
            public string Sex
            {
                get { return mSex; }
                set { mSex = value; }
            }
    
            public int Age
            {
                get { return mAge; }
                set { mAge = value; }
            }
    
            /// <summary>
            /// 关联了一个引用类型
            /// </summary>
            public WorkExperience WorkExperience 
            { 
                get { return mWorkExperience; } 
            }
    
            public void SetWorkExperience(DateTime startDate, DateTime endDate, string company, string position)
            {
                this.mWorkExperience.Company = company;
                this.mWorkExperience.EndDate = endDate;
                this.mWorkExperience.StartDate = startDate;
                this.mWorkExperience.Position = position;
            }
    
            /// <summary>
            /// 实现ICloneable接口的Clone方法
            /// </summary>
            /// <returns></returns>
            public object Clone()
            {
                // .Net 为我们提供的浅复制对象的方法
                return this.MemberwiseClone();
            }
        }
    
        /// <summary>
        /// 工作经历类
        /// </summary>
        public class WorkExperience
        {
            public DateTime StartDate { get; set; }
            public DateTime EndDate { get; set; }
            public string Company { get; set; }
            public string Position { get; set; }
        }
    [TestMethod]
            public void TestShallowCopy()
            {
                Resume myFirstResume = new Resume
                {
                    Age = 29,
                    Name = "Kevin Wang",
                    Sex = "男",
                };
                myFirstResume.SetWorkExperience(new DateTime(2006, 7, 1), new DateTime(2007, 7, 1), "My First Company", "Software Engineer");
    
                Resume mySecondResume = (Resume)myFirstResume.Clone();
                mySecondResume.SetWorkExperience(new DateTime(2007, 8, 1), new DateTime(2008, 8, 1), "My Second Company", "Software Engineer");
    
                Resume myThirdResume = (Resume)myFirstResume.Clone();
                myThirdResume.SetWorkExperience(new DateTime(2008, 8, 1), new DateTime(2009, 8, 1), "My Third Company", "Senior Software Engineer");
    
                Assert.AreEqual("My First Company", myFirstResume.WorkExperience.Company);
                Assert.AreEqual("My Second Company", mySecondResume.WorkExperience.Company);
                Assert.AreEqual("My Third Company", myThirdResume.WorkExperience.Company);       
            }
    

      

  • 相关阅读:
    [Swift]LeetCode823. 带因子的二叉树 | Binary Trees With Factors
    [Swift]LeetCode822. 翻转卡片游戏 | Card Flipping Game
    [Swift]LeetCode821. 字符的最短距离 | Shortest Distance to a Character
    [Swift]LeetCode818. 赛车 | Race Car
    [Swift]LeetCode817. 链表组件 | Linked List Components
    [Swift]LeetCode816. 模糊坐标 | Ambiguous Coordinates
    [Swift]LeetCode815. 公交路线 | Bus Routes
    [Swift]LeetCode814. 二叉树剪枝 | Binary Tree Pruning
    [Objective-C语言教程]指针(15)
    转 : net use的使用
  • 原文地址:https://www.cnblogs.com/ice-baili/p/4729205.html
Copyright © 2020-2023  润新知