PrototypePattern(原型模式)-----Java/.Net
1.介绍
原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,
根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,
这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
2.示例
[Serializable]
public class StudentProperty
{
private StudentProperty()//让我们创建对象的时候,麻烦一点
{
long lRsult = 0;
for (int i = 0; i < 1000000000; i++)
{
lRsult += i;
}
Console.WriteLine("构造函数计算完成 {0}", lRsult);
}
private static StudentProperty _StudentProperty = null; static StudentProperty()
{
_StudentProperty = new StudentProperty();
_StudentProperty.Name = "tumi";
_StudentProperty.Class = new Advanced()
{
Id = 1,
Name = "Advanced"
};
} /// <summary>
/// 原型模式:解决对象重复创建的问题
/// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建
/// </summary>
/// <returns></returns>
public static StudentProperty Clone()
{
StudentProperty studentCopy = (StudentProperty)_StudentProperty.MemberwiseClone();
return studentCopy;
} public int Id { get; set; }
public string Name { get; set; }
public DateTime Now { get; set; }
public Advanced Class { get; set; } } [Serializable]
public class Advanced
{
public int Id { get; set; }
public string Name { get; set; } }
public class SerializeHelper
{
public static string Serializable(object target)
{
using (MemoryStream stream = new MemoryStream())
{
new BinaryFormatter().Serialize(stream, target); return Convert.ToBase64String(stream.ToArray());
}
} public static T Derializable<T>(string target)
{
byte[] targetArray = Convert.FromBase64String(target); using (MemoryStream stream = new MemoryStream(targetArray))
{
return (T)(new BinaryFormatter().Deserialize(stream));
}
} public static T DeepClone<T>(T t)
{
return Derializable<T>(Serializable(t));
}
}
/// <summary>
/// 1 原型模式
/// 2 浅表复制和深表复制
/// </summary>
class Program
{
static void Main(string[] args)
{ StudentProperty studentProperty1 = StudentProperty.Clone();
studentProperty1.Name = "One";
studentProperty1.Id = 1;
studentProperty1.Now = DateTime.Now; StudentProperty studentProperty2 = StudentProperty.Clone();
studentProperty2.Name = "Two";
studentProperty2.Id = 2;
studentProperty2.Now = DateTime.Now.AddDays(1); studentProperty2.Class.Name = "ClassName"; StudentProperty studentProperty3 = SerializeHelper.Derializable<StudentProperty>(SerializeHelper.Serializable(studentProperty2));//借助序列化,实现深克隆
studentProperty3.Class.Name = "ClassName"; Console.Read();
}
}
PrototypePattern(原型模式)-----Java/.Net的更多相关文章
- 设计模式之第9章-原型模式(Java实现)
设计模式之第9章-原型模式(Java实现) “快到春节了,终于快放假了,天天上班好累的说.”“确实啊,最近加班比较严重,项目快到交付了啊.”“话说一到过节,就收到铺天盖地的短信轰炸,你说发短信就发吧, ...
- 原型模式--java代码实现
原型模式 原型模式,属于对象创建型模式中的一种.通过复制原型对象的方法来创建一个对象实例,且该对象与原对象有相同的数据结构和值.类似我们在备份数据库信息的时候,将数据库中表的结构和数据的一同备份,生成 ...
- 设计模式之原型模式——Java语言描述
原型模式是用于创建重复对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的方式 这种模式实现了一个原型接口,该接口用于创建当前对象的克隆.当直接创建对象的代价比较大时,则适 ...
- 原型模式 —— Java的赋值、浅克隆和深度克隆的区别
赋值 直接 = ,克隆 clone 假如说你想复制一个简单变量.很简单: int a= 5; int b= a; b = 6; 这样 a == 5, b == 6 不仅仅是int类型,其它七种原始数 ...
- 深度分析:java设计模式中的原型模式,看完就没有说不懂的
前言 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的 ...
- java学习笔记之原型模式及深浅拷贝
一.原型模式的基本介绍 在聊原型模式之前,我们来思考一个小问题,传统的方式我们是如何克隆对象呢? 那我们以多利羊(Sheep)为例,来说明上述这个问题,具体代码见下面: 多利羊(Sheep) publ ...
- java设计模式之原型模式
原型模式概念 该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.java中复制通过clone()实现的.clone中涉及深.浅复制.深.浅复制的概念如下: ⑴浅复制 ...
- Java设计模式5:原型模式
原型模式 原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意. 原型模式结构 原型模式要求对象实现一个 ...
- Java设计模式-原型模式(Prototype)
原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是选型模式的用意. 原型模式的结构 原型模式要求对象实现一个可以“克 ...
随机推荐
- docker oracle install
https://hub.docker.com/r/9fevrier/oracle-11g Informations Oracle directory : /opt/oracle Data direct ...
- day5_python之hashlib模块
用来校验文本内容hash:一种算法 ,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法三个特点:1.内容相同则h ...
- vue1——vue引入方法,npm本地安装
博客地址 :https://www.cnblogs.com/sandraryan/ Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.Vue 只关注视图层, 采用 ...
- MyBatis-使用XML或注解的简单实例
一.导入jar包 <dependency> <groupId>junit</groupId> <artifactId>junit</artifac ...
- Linux 端口进程查看
netstat -lnp|grep 80
- 反思K-S指标(KPMG大数据挖掘)
评估信用评级模型,反思K-S指标 2015-12-05 KPMG大数据团队 KPMG大数据挖掘 “信用评级”的概念听起来可以十分直截了当.比如一天早上你接到电话,有个熟人跟你借钱,而你将在半睡半醒间迅 ...
- [转载] 学会使用Web Service上(服务器端访问)~~~
http://www.360doc.com/content/10/0712/12/541242_38461863.shtml# 关于什么是Web Service,相信在很多地方都会有介绍.简单的讲,W ...
- 用adblock过滤页面上固定位置的悬浮窗
现在各种网站都喜欢加入position:fixed的悬浮窗,这些悬浮窗可以是分享按钮,可以是二维码,可以是各种烦人的按钮. 因为这些悬浮窗未必是广告,所以adblock很少自动屏蔽它们. 可这些悬浮窗 ...
- HDU 2454"Degree Sequence of Graph G"(度序列可图性判断)
传送门 参考资料: [1]:图论-度序列可图性判断(Havel-Hakimi定理) •题意 给你 n 个非负整数列,判断这个序列是否为可简单图化的: •知识支持 握手定理:在任何无向图中,所有顶点的度 ...
- 【js】React-Native 初始化时报错
一.按照官网的步骤一步一步的操作,到最后 react-native init AwesomeProject 时就是报错 报错信息如下图 然后我下载了这个模块 npm install prompt ...