设计模式之原型模式
原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
.NET在System命名空间中提供了ICloneable接口,其中就是唯一的一个方法Clone(),这样你就只需要实现这个接口就可以完成原型模式。(选至《大话设计模式》)
MemberwiseClone()方法,如果字段是值类型的,则对该字段执行逐位复制,如果是应用类型,则复制引用但不复制引用对象;因此,原始对象及其复本应用同一对象。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 原型模式 { class C:ICloneable { private string address; public string Address { get { return address; } set { address = value; } } public object Clone() { return (object)this.MemberwiseClone(); } } class A : ICloneable { private string name; private string sex; public C c = new C(); public void SexC(C Sc) { this.c = (C)Sc.Clone(); } public string Name { get { return name; } set { name = value; } } public string Sex { get { return sex; } set { sex = value; } } public A(string Sname, string Ssex) { this.name = Sname; this.sex = Ssex; } public void show() { Console.WriteLine("姓名为:{0}", name); Console.WriteLine("性别为:{0}", sex); Console.WriteLine("工作地点:{0}", c.Address); } public object Clone() { return (object)this.MemberwiseClone(); } } class Program { static void Main(string[] args) { C c = new C(); c.Address = "湖北"; A a = new A("张杨", "男"); a.SexC(c); c.Address = "深圳"; A a1 = (A)a.Clone(); a1.SexC(c); a.show(); a1.show(); Console.ReadKey(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话