设计模式学习笔记——原型模式(Prototype)
1.特点:在初始化信息不发生变化时考虑。
2.概念:通过复制一个已经存在的实例来创建一个新的实例。被复制的实例被称为原型,这个原型是可定制的。
3.类图:
4.程序实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | /// <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); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构