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)
原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是选型模式的用意. 原型模式的结构 原型模式要求对象实现一个可以“克 ...
随机推荐
- [USACO07JAN]区间统计Tallest Cow
前缀和 sum[i]表示前i个数的和 每次读入a[i]的时候 sum[i] = sum[i - 1] + a[i]; 查询l ~ r区间的和: sum[r] - sum[l - 1] 差分 即前缀和的 ...
- HDFS概念名称节点和数据节点-名称节点-文件系统元数据的持久状态
- react+antd 点击分页为上次操作结果
最近项目中在使用antd的分页组件时发生了第一次点击分页无变化,再次点击时数据为上一次的分页结果,代码如下: setPageIndex = (pagination)=> { const page ...
- 智课雅思短语---三、unshakable duty
智课雅思短语---三.unshakable duty 一.总结 一句话总结:不可推卸的义务 unshakable duty 1.satisfy/ meet the needs of…? 满足需求 2. ...
- Python--day63--添加书籍
添加书籍的代码:
- hdu 4394 Digital Square(bfs)
Digital Square Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- H3C Basic NAT
- 安装 Sureface Hub 系统 Windows 10 team PPIPro 系统
本文告诉大家如何安装这个系统 本文的方法我自己没试过,如果失败了,不要打我 下载地址 中文版 https://pan.baidu.com/s/1gAJSSE6KB9JHXo4BT_VfmA 其他请看 ...
- 小程序 scroll-view 左右横向滑动没有效果(无法滑动)问题
scroll-view 中的需要滑动的元素不可以用 float 浮动:
- H3C备份/恢复下次启动配置文件