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

[索引页]
[源码下载]


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


作者:webabcd


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


示例
有一个Message实体类,现在要克隆它。
MessageModel
InBlock.gifusing System; 
InBlock.gifusing System.Collections.Generic; 
InBlock.gifusing System.Text; 
InBlock.gif 
InBlock.gifnamespace Pattern.Prototype 
InBlock.gif
InBlock.gif        /// <summary> 
InBlock.gif        /// Message实体类 
InBlock.gif        /// </summary> 
InBlock.gif        public class MessageModel 
InBlock.gif        { 
InBlock.gif                /// <summary> 
InBlock.gif                /// 构造函数 
InBlock.gif                /// </summary> 
InBlock.gif                /// <param name="msg">Message内容</param> 
InBlock.gif                /// <param name="pt">Message发布时间</param> 
InBlock.gif                public MessageModel(string msg, DateTime pt) 
InBlock.gif                { 
InBlock.gif                        this._message = msg; 
InBlock.gif                        this._publishTime = pt; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                private string _message; 
InBlock.gif                /// <summary> 
InBlock.gif                /// Message内容 
InBlock.gif                /// </summary> 
InBlock.gif                public string Message 
InBlock.gif                { 
InBlock.gif                        get { return _message; } 
InBlock.gif                        set { _message = value; } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                private DateTime _publishTime; 
InBlock.gif                /// <summary> 
InBlock.gif                /// Message发布时间 
InBlock.gif                /// </summary> 
InBlock.gif                public DateTime PublishTime 
InBlock.gif                { 
InBlock.gif                        get { return _publishTime; } 
InBlock.gif                        set { _publishTime = value; } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
ShallowCopy
InBlock.gifusing System; 
InBlock.gifusing System.Collections.Generic; 
InBlock.gifusing System.Text; 
InBlock.gif 
InBlock.gifnamespace Pattern.Prototype 
InBlock.gif
InBlock.gif        /// <summary> 
InBlock.gif        /// 浅拷贝 
InBlock.gif        /// </summary> 
InBlock.gif        public class ShallowCopy : ICloneable 
InBlock.gif        { 
InBlock.gif                /// <summary> 
InBlock.gif                /// 构造函数 
InBlock.gif                /// </summary> 
InBlock.gif                public ShallowCopy() 
InBlock.gif                { 
InBlock.gif                         
InBlock.gif                } 
InBlock.gif 
InBlock.gif                /// <summary> 
InBlock.gif                /// 实现ICloneable的Clone()方法 
InBlock.gif                /// </summary> 
InBlock.gif                /// <returns></returns> 
InBlock.gif                public Object Clone() 
InBlock.gif                { 
InBlock.gif                        return this.MemberwiseClone(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                private MessageModel _mm; 
InBlock.gif                /// <summary> 
InBlock.gif                /// Message实体对象 
InBlock.gif                /// </summary> 
InBlock.gif                public MessageModel MessageModel 
InBlock.gif                { 
InBlock.gif                        get { return _mm; } 
InBlock.gif                        set { _mm = value; } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
DeepCopy
InBlock.gifusing System; 
InBlock.gifusing System.Collections.Generic; 
InBlock.gifusing System.Text; 
InBlock.gif 
InBlock.gifnamespace Pattern.Prototype 
InBlock.gif
InBlock.gif        /// <summary> 
InBlock.gif        /// 深拷贝 
InBlock.gif        /// </summary> 
InBlock.gif        public class DeepCopy : ICloneable 
InBlock.gif        { 
InBlock.gif                /// <summary> 
InBlock.gif                /// 构造函数 
InBlock.gif                /// </summary> 
InBlock.gif                public DeepCopy() 
InBlock.gif                { 
InBlock.gif                         
InBlock.gif                } 
InBlock.gif 
InBlock.gif                /// <summary> 
InBlock.gif                /// 构造函数 
InBlock.gif                /// </summary> 
InBlock.gif                /// <param name="mm">Message实体对象</param> 
InBlock.gif                public DeepCopy(MessageModel mm) 
InBlock.gif                { 
InBlock.gif                        _mm = mm; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                /// <summary> 
InBlock.gif                /// 实现ICloneable的Clone()方法 
InBlock.gif                /// </summary> 
InBlock.gif                /// <returns></returns> 
InBlock.gif                public Object Clone() 
InBlock.gif                { 
InBlock.gif                        return new DeepCopy(new MessageModel(_mm.Message, _mm.PublishTime)); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                private MessageModel _mm; 
InBlock.gif                /// <summary> 
InBlock.gif                /// Message实体对象 
InBlock.gif                /// </summary> 
InBlock.gif                public MessageModel MessageModel 
InBlock.gif                { 
InBlock.gif                        get { return _mm; } 
InBlock.gif                        set { _mm = value; } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
client
InBlock.gifusing System; 
InBlock.gifusing System.Data; 
InBlock.gifusing System.Configuration; 
InBlock.gifusing System.Collections; 
InBlock.gifusing System.Web; 
InBlock.gifusing System.Web.Security; 
InBlock.gifusing System.Web.UI; 
InBlock.gifusing System.Web.UI.WebControls; 
InBlock.gifusing System.Web.UI.WebControls.WebParts; 
InBlock.gifusing System.Web.UI.HtmlControls; 
InBlock.gif 
InBlock.gifusing Pattern.Prototype; 
InBlock.gif 
InBlock.gifpublic partial class Prototype : System.Web.UI.Page 
InBlock.gif
InBlock.gif        protected void Page_Load(object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                Response.Write("ShallowCopy演示如下:<br />"); 
InBlock.gif                ShowShallowCopy(); 
InBlock.gif 
InBlock.gif                Response.Write("DeepCopy演示如下:<br />"); 
InBlock.gif                ShowDeepCopy();         
InBlock.gif        } 
InBlock.gif 
InBlock.gif        private void ShowShallowCopy() 
InBlock.gif        { 
InBlock.gif                ShallowCopy sc = new ShallowCopy(); 
InBlock.gif                sc.MessageModel = new MessageModel("ShallowCopy", DateTime.Now); 
InBlock.gif 
InBlock.gif                ShallowCopy sc2 = (ShallowCopy)sc.Clone(); 
InBlock.gif 
InBlock.gif                Response.Write(sc.MessageModel.Message); 
InBlock.gif                Response.Write("<br />"); 
InBlock.gif                Response.Write(sc2.MessageModel.Message); 
InBlock.gif                Response.Write("<br />"); 
InBlock.gif 
InBlock.gif                sc.MessageModel.Message = "ShallowCopyShallowCopy"
InBlock.gif 
InBlock.gif                Response.Write(sc.MessageModel.Message); 
InBlock.gif                Response.Write("<br />"); 
InBlock.gif                Response.Write(sc2.MessageModel.Message); 
InBlock.gif                Response.Write("<br />"); 
InBlock.gif        } 
InBlock.gif 
InBlock.gif        private void ShowDeepCopy() 
InBlock.gif        { 
InBlock.gif                DeepCopy sc = new DeepCopy(); 
InBlock.gif                sc.MessageModel = new MessageModel("DeepCopy", DateTime.Now); 
InBlock.gif 
InBlock.gif                DeepCopy sc2 = (DeepCopy)sc.Clone(); 
InBlock.gif 
InBlock.gif                Response.Write(sc.MessageModel.Message); 
InBlock.gif                Response.Write("<br />"); 
InBlock.gif                Response.Write(sc2.MessageModel.Message); 
InBlock.gif                Response.Write("<br />"); 
InBlock.gif 
InBlock.gif                sc.MessageModel.Message = "DeepCopyDeepCopy"
InBlock.gif 
InBlock.gif                Response.Write(sc.MessageModel.Message); 
InBlock.gif                Response.Write("<br />"); 
InBlock.gif                Response.Write(sc2.MessageModel.Message); 
InBlock.gif                Response.Write("<br />"); 
InBlock.gif        } 
InBlock.gif}
运行结果
ShallowCopy演示如下:
ShallowCopy
ShallowCopy
ShallowCopyShallowCopy
ShallowCopyShallowCopy
DeepCopy演示如下:
DeepCopy
DeepCopy
DeepCopyDeepCopy
DeepCopy


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


OK
[源码下载]




     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344497,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java dump分析工具_Java 性能分析工具 (2):Java 内置监控工具

引言本文为 Java 性能分析工具系列文章第二篇&#xff0c;第一篇&#xff1a;操作系统工具。在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身。在 JDK 中有许多内置的工具&#xff0c;其中包括&#xff1a;jcmd&#xff1a;打印一个 Java 进…

Python面试题(第二篇)

第二部分 网络编程和并发&#xff08;34题&#xff09;1、简述 OSI 七层协议。2、什么是C/S和B/S架构&#xff1f;3、简述 三次握手、四次挥手的流程。4、什么是arp协议&#xff1f;5、TCP和UDP的区别&#xff1f;6、什么是局域网和广域网&#xff1f;7、为何基于tcp协议的通信…

noip模拟赛 radius

分析&#xff1a;这道题实在是不好想&#xff0c;一个可以骗分的想法是假定要求的那个点在中心点上,可以骗得不少分.但是在边上的点要怎么确定呢&#xff1f;理论复杂度O(&#xfe62;无穷).答案一定是和端点有关的&#xff0c;涉及到最大值最小&#xff0c;考虑二分最大值&…

c语言中int的取值范围_c语言入门(1)

c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语言是进入编程世…

vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。

vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c; 然后再试一次。 报错原因&#xff1a; 没有安装脚手架vue-cli 解决方法&#xff1a;安装脚手架vue-cli npm inst…

session的生命周期

session的生命周期分为创建、活动、销毁三个阶段 创建一个新的会话不代表旧的会话就销毁了 session.invalidate()方法可以销毁当前会话 在page1中写上这个方法再打开网页 说明该会话被销毁了出现了错误 我们把这个方法写在所有代码段的下面 再打开这个网页 刷新网页 这个sessio…

虚拟化与网络

本文转自Grodd51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/juispan/1959791&#xff0c;如需转载请自行联系原作者

算法基础之搜索和经典排序

目录 简介 搜索算法 二分法查找 排序算法 冒泡排序&#xff08;Bubble Sort&#xff09; 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insert Sort&#xff09; 快速排序&#xff08;Quick Sort&#xff09; 归并排序&#xff08;Merge Sort…

背景宽高随文本变化_中科大提出ContourNet:更准确的任意形状场景文本检测新方法...

点击上方“CVer”&#xff0c;选择加"星标"置顶重磅干货&#xff0c;第一时间送达本文转载自&#xff1a;CSIG文档图像分析与识别专委会本文简要介绍2020年被CVPR录用的论文“ContourNet: Taking a Further Step toward Accurate Arbitrary-shaped Scene Text Detect…

算法面试题汇总(更新中)

1、根据数字返回相应位置数字 def get_digit(num, i):# i0 个位 1 十位 2 百位...return num // (10 ** i) % 10# print(get_digit(12345, 6)) 2、列表反转&#xff0c;不用内置函数 def reverse_list(li):n len(li)for i in range(n // 2):li[i], li[n-i-1] li[n-i-1], …

使用Jmeter对mysql进行性能测试入门

使用Jmeter对mysql进行性能测试入门 第一步&#xff1a;测试环境准备&#xff1a; 1&#xff09;、mysql> select version(); ----------- | version() | ----------- | 5.5.13 | ----------- ms数据库数据&#xff1a; mysql> select count(*) from account; ----------…

算法基础之数据结构

whats the 数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说&#xff0c;数据结构就是设计数据以何种方式组织并存储在计算机中。 比如&#xff1a;列表、集合与字典等都是一种数据结构。 通常情况下&#xff…

soap接口怎么不返回tuple python_Python 中的接口

Python 是动态类型语言, 只在运行时做 Duck Typing 检查.利: 灵活, 方便弊: 代码混乱, 缺少规范标准自带两类接口支持: abc 和 typing.Protocol, 有他们协助给天马行空的程序员套上枷锁, Python 的大工程才可以"上道"abcabc 就是 Abstract Base Class, 虚基类. 跟 Ja…

java 第11次作业:你能看懂就说明你理解了——this关键字

this 代表当前对象 转载于:https://www.cnblogs.com/qingyundian/p/7736699.html

c#多线程操作界面控件的简单实现

一个小功能&#xff0c;早有人实现了。自己在一个项目中用到&#xff0c;觉得有必要记录一下&#xff0c;写下来。代码 从上面你可能已经看出如何多线程操作同一个控件的&#xff0c;就是通过一个委托&#xff0c;然后定义委托方法&#xff0c;判断控件的InvokeRequired属性&am…

ssh 免密_Linux下配置SSH免密通信 “sshkeygen”的基本用法

利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序&#xff0c;后来又迅速扩展到其他操作平台。1 什么是SSH引用百度百科的说明:SSH 为 Secure Shell的缩写&#xff0c;由 IETF 的网络小组(Network Working Group)所制定&#xff1b;它是…

Python 第三方模块之 NumPy - 科学计算

NumPy 简介 NumPy 发展历史 1995年 Jim HugUNin开发了Numeric。随后&#xff0c;Numarray包诞生。Travis Oliphants整合Numeric和Numarray&#xff0c;开发Numpy&#xff0c;于2006年发布第一个版本。Numpy&#xff08;Numeric Python&#xff09;提供了许多高级的数值编程工…

Python 第三方模块之 matplotlib - 绘图库

简介 matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。MATLAB语言是面向过程的。利用函数的调用&#xff0c;MATLAB中可以轻松的利用一行命令来绘制直线&#xff0c;然后再用一系列的函数调整结果。 matplotlib有一套完全仿照MATLAB的函数形式…

微软P2V工具之Disk2VHD

虚拟化经过最近几年的发展&#xff0c;已经有很多的应用和服务迁移到了虚拟化的平台上了。在实施虚拟化的过程中就会涉及到将原来老旧的服务器来迁移到虚拟化平台的运行&#xff0c;这就是P2V&#xff0c;物理机转换为虚拟机。谈到P2V大家会想到很多的工具&#xff0c;例如Vmwa…

生成n套数位加减乘除_leetcode 算法汇总(四)位运算

一、 运算符& 与运算&#xff1a; 两个位都是 1 时&#xff0c;结果才为 1&#xff0c;否则为 0| 或运算&#xff1a; 两个位都是 0 时&#xff0c;结果才为 0&#xff0c;否则为 1^ 异或运算&#xff1a; 两个位相同则为 0&#xff0c;不同则为 1~ 取反运算&#xff1a;0 …