乐在其中设计模式(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,一经查实,立即删除!

相关文章

python123添加列表元素_Python之列表

Python变量没有数据类型&#xff0c;所以Python没有数组。 整数&#xff1b;浮点数&#xff1b;字符串&#xff1b;对象 创建一个列表&#xff1a; 1.member[大鱼,123,3.14,[1,2,3]] 2.empty[] 向列表添加元素&#xff1a; append&#xff08;&#xff09;&#xff1a; member[…

为机器学习占地14

是将若干个学习器(分类器&回归器)组合之后产生一个新学习器。弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate <。 集成算法的成功在于保证弱分类器的多样性(Diversity)。而且集成不稳定的算法也能够得到一个比较明显的性能提升。 常见的…

优秀程序员 分析提高能力 程序进阶

我出生在南方的一个农村。还记得小时候家里是很穷的&#xff0c;那时候上学也很便宜&#xff0c;我已记不清初中以前的学费是多少了。反正从小在家里玩泥巴&#xff0c;有一日村里两个女孩去上学&#xff0c;看到我就说一起去上学吧。当时一想&#xff0c;玩泥巴也厌烦了&#…

html中通过点击button标签实现页面跳转的三种方法

方法1&#xff1a;使用onclick事件 <input type"button" value"按钮"onclick"javascrtpt:window.location.hrefhttp://www.baidu.com/" />或者直接使用button标签 <button onclick"window.location.href https://www.baidu.com…

mybatis调用存储过程

直接贴代码吧 注解式可以调用 但是不能返回结果 所有我就贴配置式的 有知道注解怎么返回结果的请评论 数据库代码 #表 DROP TABLE IF EXISTS p_user; CREATE TABLE p_user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(10) DEFAULT NULL,sex char(2) DEFAULT NULL,PRIMAR…

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

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

Linux+php+memcache+APC加速PHP网站

一、前言对于一个站长而言不仅要做好网站内容外&#xff0c;还需要对网站做优化&#xff0c;如果速度访问很慢的&#xff0c;没有人下次再访问你的站点&#xff0c;目前国内使用php的网站不计其数&#xff0c;这里用我的博客为例&#xff1a;http://chinaapp.sinaapp.com 以加速…

为机器学习占地13

是将若干个学习习 弱分类器间存在一定的差异性&#xff0c;这会导致分类的边界不同&#xff0c;也就是说可能存在错误。那么将多个弱分类器合并后&#xff0c;就可以得到更加合理的边界&#xff0c;减少整体的错误率&#xff0c;实现更好的效果&#xff1b; 对于数据集过大或者…

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;考虑二分最大值&…

来自IT公司速查手册的各大IT公司薪资和待遇内幕

来自IT公司速查手册的各大IT公司薪资和待遇内幕 &#xff08;转载于 http://xuchaoyi99.cnblogs.com/ &#xff09; 编号 1. 杭州 诺基亚 2. 南京 趋势科技 Trend 3. 北京 联想&#xff08;北京&#xff09;有限公司 4. 深圳 华为 5. 深圳 中兴通讯 6. 上海 SAP 7.…

Docker 精通之 Dockerfile

Docker 精通系列 Docker 精通之入门Docker 精通之微服务Docker 精通之常用命令Docker 精通之 Dockerfile 1.基本说明 Dockfile 是一个用于编写 docker 镜像生成过程的文件&#xff0c;其有特定的语法。在一个文件夹中&#xff0c;如果有一个名字为 Dockfile 的文件&#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…

IT人不要一直做技术

发表于&#xff1a;2009-03-04 09:51:44 楼主IT人不要一直做技术 【引子】感觉这篇文章很有深意&#xff0c;正是我所想说的话。希望大家有借鉴。 【原文】 我现在是自己做&#xff0c;但我此前有多年在从事软件开发工作&#xff0c;当回过头来想一想自己&#xff0c;觉得特别…

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

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

python 类、模块、包的区别

学习python的时候&#xff0c;碰到了import 和 from xx import xx的问题&#xff0c; 为了弄清楚什么是 module 和package &#xff0c;这篇文章讲解的不错&#xff01;&#xff01; 原文&#xff1a; http://www.cnblogs.com/kex1n/p/5977051.html --------------------------…