设计模式之原型模式
原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
作用(解决的问题):简化对象的创建过程。
优点:
1、当创建对象的实例较为复杂的时候,使用原型模式可以简化对象的创建过程,通过复制一个已有的实例可以提高实例的创建效率。
2、扩展性好,由于原型模式提供了抽象原型类,在客户端针对抽象原型类进行编程,符合开闭原则。
3、原型模式提供了简化的创建结构,工厂方法模式常常需要有一个与产品类等级结构相同的工厂等级结构,而原型模式不需要这样,
原形模式中产品的复制是通过封装在类中的克隆方法实现的,无需专门的工厂类来创建产品。
4、可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份并将其状态保存起来,以便在需要的时候使用(例如恢复到历史某一状态)。
缺点:
1、需要为每一个类配置一个克隆方法,而且该克隆方法位于类的内部,当对已有类进行改造的时候,需要修改代码。
2、在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重签到引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来会比较麻烦。
实现:
/// <summary> /// 克隆接口 /// </summary> /// <typeparam name="T"></typeparam> public interface Prototype<T> { T Clone(); } /// <summary> /// 实现类 /// </summary> public class ConcretePrototype : Prototype<ConcretePrototype> { public ConcretePrototype Clone() { return (ConcretePrototype)this.MemberwiseClone(); } }
原型模式说白了就是克隆,不用想的太复杂,定义一个克隆接口,然后去实现就可以了。我们唯独需要注意的是深度复制和浅度复制的问题。
浅度复制:值类型复制一份数据出来,引用类型只会复制地址,也就是说浅度复制后,母体和克隆体里面的引用类型数据会指向同一个实体。
深度复制:值类型复制一份数据出来,引用类型会生成一个新的实体,和母体的数据保持一致。虽然母体和克隆体引用类型数据是一样的,但是是两个不同的实体。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?