乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

C#设计模式教程(6):原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而不是通过实例化的方式。在C#中,这通常是通过实现ICloneable接口来完成的,该接口要求实现一个Clone方法,用于复制对象。 阅读详情
[索引页]
[源码下载]


乐在其中设计模式(C#) - 原型模式(Prototype Pattern)


作者: webabcd


介绍
用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。


示例
有一个Message实体类,现在要克隆它。



MessageModel
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Prototype
{
    
/// <summary>
    
/// Message实体类
    
/// </summary>

    public class MessageModel
    
{
        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="msg">Message内容</param>
        
/// <param name="pt">Message发布时间</param>

        public MessageModel(string msg, DateTime pt)
        
{
            
this._message = msg;
            
this._publishTime = pt;
        }


        
private string _message;
        
/// <summary>
        
/// Message内容
        
/// </summary>

        public string Message
        
{
            
get { return _message; }
            
set { _message = value; }
        }


        
private DateTime _publishTime;
        
/// <summary>
        
/// Message发布时间
        
/// </summary>

        public DateTime PublishTime
        
{
            
get { return _publishTime; }
            
set { _publishTime = value; }
        }

    }

}


ShallowCopy
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Prototype
{
    
/// <summary>
    
/// 浅拷贝
    
/// </summary>

    public class ShallowCopy : ICloneable
    
{
        
/// <summary>
        
/// 构造函数
        
/// </summary>

        public ShallowCopy()
        
{
            
        }


        
/// <summary>
        
/// 实现ICloneable的Clone()方法
        
/// </summary>
        
/// <returns></returns>

        public Object Clone()
        
{
            
return this.MemberwiseClone();
        }


        
private MessageModel _mm;
        
/// <summary>
        
/// Message实体对象
        
/// </summary>

        public MessageModel MessageModel
        
{
            
get { return _mm; }
            
set { _mm = value; }
        }

    }

}


DeepCopy
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Prototype
{
    
/// <summary>
    
/// 深拷贝
    
/// </summary>

    public class DeepCopy : ICloneable
    
{
        
/// <summary>
        
/// 构造函数
        
/// </summary>

        public DeepCopy()
        
{
            
        }


        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="mm">Message实体对象</param>

        public DeepCopy(MessageModel mm)
        
{
            _mm 
= mm;
        }


        
/// <summary>
        
/// 实现ICloneable的Clone()方法
        
/// </summary>
        
/// <returns></returns>

        public Object Clone()
        
{
            
return new DeepCopy(new MessageModel(_mm.Message, _mm.PublishTime));
        }


        
private MessageModel _mm;
        
/// <summary>
        
/// Message实体对象
        
/// </summary>

        public MessageModel MessageModel
        
{
            
get { return _mm; }
            
set { _mm = value; }
        }

    }

}



client
using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

using  Pattern.Prototype;

public  partial  class  Prototype : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        Response.Write(
"ShallowCopy演示如下:<br />");
        ShowShallowCopy();

        Response.Write(
"DeepCopy演示如下:<br />");
        ShowDeepCopy();    
    }


    
private void ShowShallowCopy()
    
{
        ShallowCopy sc 
= new ShallowCopy();
        sc.MessageModel 
= new MessageModel("ShallowCopy", DateTime.Now);

        ShallowCopy sc2 
= (ShallowCopy)sc.Clone();

        Response.Write(sc.MessageModel.Message);
        Response.Write(
"<br />");
        Response.Write(sc2.MessageModel.Message);
        Response.Write(
"<br />");

        sc.MessageModel.Message 
= "ShallowCopyShallowCopy";

        Response.Write(sc.MessageModel.Message);
        Response.Write(
"<br />");
        Response.Write(sc2.MessageModel.Message);
        Response.Write(
"<br />");
    }


    
private void ShowDeepCopy()
    
{
        DeepCopy sc 
= new DeepCopy();
        sc.MessageModel 
= new MessageModel("DeepCopy", DateTime.Now);

        DeepCopy sc2 
= (DeepCopy)sc.Clone();

        Response.Write(sc.MessageModel.Message);
        Response.Write(
"<br />");
        Response.Write(sc2.MessageModel.Message);
        Response.Write(
"<br />");

        sc.MessageModel.Message 
= "DeepCopyDeepCopy";

        Response.Write(sc.MessageModel.Message);
        Response.Write(
"<br />");
        Response.Write(sc2.MessageModel.Message);
        Response.Write(
"<br />");
    }

}


运行结果
ShallowCopy演示如下:
ShallowCopy
ShallowCopy
ShallowCopyShallowCopy
ShallowCopyShallowCopy
DeepCopy演示如下:
DeepCopy
DeepCopy
DeepCopyDeepCopy
DeepCopy


参考
http://www.dofactory.com/Patterns/PatternPrototype.aspx


OK
[源码下载]
LCL滤波器参数设计实战:从理论约束到工程选型指南 本文提供了LCL滤波器参数设计的实战指南,从理论约束到工程选型逐步拆解。核心在于平衡总电感量、电感比与电容值,确保谐振频率落在安全区间,以满足并网电流谐波标准并维持系统稳定。文章以10kW并网逆变器为例,给出了具体的参数计算流程与选型步骤,并强调了寄生参数、阻尼设计等工程实现细节。 阅读详情

相关推荐

HexView 脚本自动化工具:从刷写文件处理到批量转换实战

本文详细介绍了如何利用HexView脚本自动化工具高效处理嵌入式刷写文件。通过实战演示,文章展示了如何使用bat脚本实现S19、HEX等格式文件的剪切、填充、合并与批量转换,构建自动化流水线,从而显著提升汽车电子等领域的开发与生产效率。

weixin_29237635的博客 356

乐在其中设计模式(C#) - 状态模式(State Pattern)

[索引页][源码下载]乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。 示例 有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里。在对象内部可以根据用...

weixin_34001430的博客 99

从触觉到视觉:GelSight传感器的工作原理与实战应用指南

本文深入解析了GelSight光学触觉传感器的核心工作原理,它通过将物理接触转化为视觉图像,为机器人提供了高精度的触觉感知。文章详细介绍了其在工业微观缺陷检测、机器人灵巧操作等领域的实战应用,并提供了从系统搭建到算法开发的完整指南,帮助工程师将这一前沿技术落地于实际项目。

solidity8miner的博客 939

乐在其中设计模式(C#)系列文章索引

[源码下载]乐在其中设计模式(C#)系列文章索引作者:webabcd介绍类图加实例的方式介绍设计模式(C#)创建型模式(Creational Pattern)1、乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

webabcd的专栏 446

英雄联盟(MOBA)完整制作教程

这是一份从零到上线、可落地的 LOL 风格 MOBA 游戏开发全流程教程,覆盖策划、美术、程序、测试、运营全环节,适合独立团队或学习参考。

qq_35779316的博客 539

Linux系统监控实战:夜莺监控+categraf采集器配置全流程(附常见问题排查)

本文详细介绍了在Linux系统中使用夜莺监控和categraf采集器进行系统监控的全流程配置,包括环境准备、核心配置文件(如config.toml和procstat.toml)详解、服务集成与验证、高级监控配置实战以及常见问题排查。通过实战案例和优化建议,帮助运维人员快速构建高效的监控体系。

xray4的博客 736

C#设计模式--原型模式(Prototype Pattern)

这个示例展示了如何使用状态模式和克隆模式来实现文档编辑器的撤销功能。通过将文档的历史版本存储在栈中,并在需要时进行撤销操作,可以有效地管理文档的状态变化。同时,通过实现 ICloneable 接口,确保每次创建新文档时都能获得一个独立的副本,保证了文档状态的独立性。

仰望星空的人 1261

STM32F103四位数码管动态显示实战:从硬件连接到代码调试(附Proteus仿真)

本文详细介绍了STM32F103驱动四位数码管的动态显示技术,从硬件连接到代码调试的全过程。内容包括共阴/共阳数码管的区别、GPIO配置、动态显示原理及优化方法,并附有Proteus仿真验证。通过实战案例,帮助开发者快速掌握STM32数码管动态显示的核心技术。

weixin_29168393的博客 469

原型模式(Prototype Pattern)

设计模式 - 吕震宇 .NET设计模式系列文章 薛敬明的专栏 乐在其中设计模式(C#) .NET Design Patterns C#设计模式(9)-Prototype Pattern http://www.cnblogs.com/zhenyulu/articles/39257.html 一、 原型(Prototype)模式 原型模式的用意是:通过给出一个原

jiangxinyu的专栏 1718

025、Zephyr RTOS设备树覆盖与修改

本文分享了在Zephyr RTOS中使用设备树覆盖(overlay)的实战经验。作者通过一个工业数据采集项目中GPIO无法拉高的调试案例,揭示了设备树覆盖的"叠加"本质而非简单替换。文章详细介绍了覆盖文件的正确编写方式,包括节点引用、pinctrl配置等技巧,并总结了常见陷阱如状态设置不完整、别名冲突等问题。特别强调了条件覆盖的用法和调试方法,最后提出了覆盖文件管理的五项实用原则,强调设备树覆盖是硬件与软件之间的重要契约,需要谨慎对待。全文以实际项目为背景,提供了可操作性强的技术建议。

m0_50546716的博客 33

Claude Code 分布式并行开发最佳实践:1中枢+10Worker跨多Git仓库全流程落地

本文介绍了一套基于Claude Code和Git Worktree的分布式并行开发方案,解决多仓库、微服务开发中的核心痛点。方案采用"1个决策中枢+10个并行Worker"架构,中枢负责任务拆解和调度,每个Worker绑定独立仓库实现完全隔离开发。关键优势包括:任务并行效率提升10倍、跨仓库依赖自动编排、版本统一管理、零第三方依赖。文章详细提供了环境准备、架构设计、中枢搭建和初始化脚本等全流程落地指南,特别适合多仓库协同的全栈开发场景。

AI天才研究院 243

设计模式6:Prototype Pattern (原型模式)

出自于:http://www.cnblogs.com/zhenyulu/articles/39257.html参考于:http://www.dofactory.com/Patterns/PatternPrototype.aspx一、 原型(Prototype)模式Definition:Specify the kind of objects to create using a proto

薛敬明的专栏 3244

置顶必读(2) | 《YOLOv11实战:从入门到深度优化》目录导航篇(持续更新中)

🏆 本文收录于 《YOLOv11实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现全网各类 YOLOv11 / YOLO系列改进方案与实战案例,目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。 内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么改”,更讲“为什么这样改、如何真正落地到项目中”。

**My Coding Family** 11万+

C# 设计模式:第二章 - 创建者模式 之 原型模式(Prototype Pattern)

这章中,我们学习了原型模式的基本概念、应用场景、实现方法以及注意事项。原型模式通过复制现有对象来创建新对象,而不是通过构造函数来创建。它在减少对象创建的开销、简化对象创建过程和支持多态性方面有着重要的作用。我们通过三个不同的示例展示了如何在 C# 中实现原型模式,包括浅拷贝和深拷贝的实现方式。最后,我们还讨论了一些使用原型模式时需要注意的地方,帮助你在实际开发中做出明智的选择。

caifox的博客 1063

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

原型模式(Prototype Pattern)

原型模式定义了一个用于创建对象的接口,使得任何类只要实现这个接口就可以通过复制来创建对象。这个接口通常包含一个克隆自身的方法,如clone()方法(在Java中)。原型模式是一种强大的设计模式,它允许通过复制已有对象来创建新对象,从而提高了对象创建的效率和性能。然而,在使用原型模式时,也需要注意其实现复杂性和深拷贝与浅拷贝的风险。

weixin_51803498的博客 971

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C#设计模式(6)——原型模式(Prototype Pattern)

C#设计模式(6)——原型模式(Prototype Pattern) 一、引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配了多个一样的类实例对象,然后如果采用工厂模式来创建这样的系统的话,随...

fgmah2000的博客 215

C#设计模式(6)——原型模式(Prototype Pattern) C# 深浅复制 MemberwiseClone

C#设计模式(6)——原型模式(Prototype Pattern) 一、引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配了多个一样的类实例对象,然后如果采用工厂模式来创建这样的系统的话,随着产品类的不断增加,导致...

297

设计模式- 原型模式(Prototype Pattern)

定义 原型模式(Prototype Pattern):指定使用原型实例创建的对象类型,并通过复制此原型创建新对象。 C#例子 [Serializable] public class Sheep : ICloneable { public string Name { get; set; } public List<Sheep> ...

易兒善 403

原型模式(Prototype Pattern)——C#设计模式六

一、引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配了多个一样的类实例对象,然后如果采用工厂模式来创建这样的系统的话,随着产品类的不断增加,导致子类的数量不断增多,反而增加了系统复杂程度,所以在这里使用工厂模式来封装类创建过程并不合适,然而原...

U3D开发 181

原型模式(prototype pattern)

原型模式其实很简单,又可以成为克隆模式。想象你要造一架飞机,如果你要重头到位掌握造飞机的核心技术,那么你要从力学,材料学开始学起。但是你想快点看到成果,那你就把对应的零件买回来自己组装一个就好了。...

q__y__L的博客 579
上一篇: 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
下一篇: 乐在其中设计模式(C#) - 组合模式(Composite Pattern)
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值