小菜学习设计模式(四)—原型(Prototype)模式

前言

设计模式目录:

本篇目录:

  其实说到原型模式,大家可能会想到Clone,其实也不尽然,在我们的日常生活中,原型(Prototype)模式也可以经常看到:

你觉得某位明星的发型很好看,你也想做个和他一样的发型,于是你拿个照片去理发店说:我要做个和这个一模一样的发型。

  其实那个明星的发型某种意义上说就是原型,因为已经有发型参考了,所以发型师会很快的做出来。就像我们在编程时,当创建一些对象(特别是大对象)非常耗时时,或者创建过程非常复杂时,原型模式就会很有用。

概述

  我们看下GoF对原型(Prototype)模式下的定义:

使用原型模型实例指定将要创建的对象类型,通过复制这个实例创建新的对象。

  从这个定义中,我们可以分解下,其实说的意思就是:指定类型,复制对象。就像上面的例子,造型就是一个指定的类型,然后去复制此类型的对象。原型模型的简单静态类图:

小菜学习设计模式(四)—原型(Prototype)模式

  Client使用Prototype的Clone()方法得到这个对象的副本,我们先看下引用类型的存储:引用类型的变量在栈中分配一个内存空间,这个内存空间包含的是对另一个内存位置的引用,这个位置是托管堆中的一个地址,即存放此变量实际值的地方。.NET自动维护一个堆指针,它包含堆中下一个可用内存空间的地址。就是说引用类型在栈中存储一个托管堆的地址,托管堆存储这个变量的实际值。上面所说的“复制对象”在原型(Prototype)模式中分为两种,一种是只复制栈中的托管堆地址,就是说副本对象和原对象指向的托管堆的地址是一样的,这种复制称为浅拷贝(Shallow Copy);另一种是栈中存放的地址和托管堆中实际值都复制,就是说生成一个和原对象一样的全新对象,这种复制称为深拷贝(Deep Copy)。

  我们用一张示意图可以简单概述下:

小菜学习设计模式(四)—原型(Prototype)模式

  其实关于浅拷贝和深拷贝在我们现实生活中也有相应类似的例子,比如双胞胎,长的一样就像一个模子刻出来的一样,而且各自有各自的身体互不影响,在某种意义上说可以称为深拷贝;在双胞胎中也有一些特殊的,比如连体双胞胎,有的两个身体公用一个心脏什么的,怎么说呢,在某种意义上这种你也可以称为浅拷贝。这个例子只是形象说明下原型模式中复制对象的含义,可能有些不恰当的地方。

实现

  其实在.net中关于浅拷贝提供了一个方法MemberwiseClone();

aaarticlea/png;base64,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" alt="" />

  MemberwiseClone()方法返回的是Object类型,注意方法的修饰符是protected,就是说,如果想让外部对象使用它,必须在子类重写该方法,设定其访问范围是public。还有就是实现对象的复制必须实现ICloneable接口,并实现其Clone()方法。就上面说的双胞胎的例子,我们做一个简单的示例:

     /// <summary>
/// 心脏类
/// </summary>
public class Heart
{
private int _size;
private int _volume;
/// <summary>
/// 大小
/// </summary>
public int Size
{
get { return _size; }
set { _size = value; }
}
/// <summary>
/// 体积
/// </summary>
public int Volume
{
get { return _volume; }
set { _volume = value; }
}
} /// <summary>
/// baby类
/// </summary>
public class Baby : ICloneable
{
private string _name;
private string _description;
private Heart _hearttype;
/// <summary>
/// 名称
/// </summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// 描述
/// </summary>
public string Description
{
get { return _description; }
set { _description = value; }
}
/// <summary>
/// 心脏特征
/// </summary>
public Heart HeartType
{
get { return _hearttype; }
set { _hearttype = value; }
} #region ICloneable 成员
public object Clone()
{
return this.MemberwiseClone();
}
#endregion
}

  测试代码:

         static void Main(string[] args)
{
Baby baby1 = new Baby();
baby1.Name = "I'm baby1";
baby1.Description = "I'm baby";
baby1.HeartType = new Heart() { Size = , Volume = };
Baby baby2 = (Baby)baby1.Clone();
baby2.Name = "I'm baby2"; Console.WriteLine("baby1 info:");
Console.WriteLine(baby1.Name);
Console.WriteLine(baby1.Description);
Console.WriteLine("baby2 info:");
Console.WriteLine(baby2.Name);
Console.WriteLine(baby2.Description);
Console.WriteLine("The heart of the different:");
Console.WriteLine(baby1.HeartType == baby2.HeartType);
}

  运行结果:

aaarticlea/png;base64,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" alt="" />

  我们可以看到baby1.HeartType和baby2.HeartType的引用地址是一样的,这种就是浅拷贝(Shallow Copy),就说明baby1和baby2公用一个心脏,是连体双胞胎。

深拷贝(Deep Copy)

  其实上面的代码稍微修改下就是深拷贝,如下:

         static void Main(string[] args)
{
Baby baby1 = new Baby();
baby1.Name = "I'm baby1";
baby1.Description = "I'm baby";
baby1.HeartType = new Heart() { Size = , Volume = };
Baby baby2 = (Baby)baby1.Clone();
baby2.HeartType = new Heart() { Size = , Volume = };//重新创建对象
baby2.Name = "I'm baby2"; Console.WriteLine("baby1 info:");
Console.WriteLine(baby1.Name);
Console.WriteLine(baby1.Description);
Console.WriteLine("baby2 info:");
Console.WriteLine(baby2.Name);
Console.WriteLine(baby2.Description);
Console.WriteLine("The heart of the different:");
Console.WriteLine(baby1.HeartType == baby2.HeartType);
}

  上面给baby2重新创建一个和baby1一样的心脏,而不是公用一个,运行结果:

aaarticlea/png;base64,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" alt="" />

  可以看到baby1.HeartType和baby2.HeartType的引用地址是不一样的,虽然是一样的心脏,但是是两个独立相同的心脏,其实上面的方法并不算是深拷贝,只是实现了深拷贝的效果,因为并不是在拷贝中完成的。这种气势有个不好的地方,当一个对象中有很多对象组合的时候,而且这个对象内部很复杂,我们不可能复制完之后,每个对象的去重新赋值,这样实现深拷贝就没有什么意义。当然还有一种实现深拷贝的方式就是序列化,必须在类的前面加上[Serializable]表示,指示这个类是可以序列化的,我们把Clone()的方法修改下:

         public object Clone()
{
object result = null;
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, this);
stream.Close();
byte[] streamByte = stream.ToArray();
MemoryStream stream2 = new MemoryStream(streamByte);
result = formatter.Deserialize(stream2);
stream2.Close();
return result;
}

  现在Clone()方法做的工作就是序列化和反序列化,我们使用浅拷贝的测试代码,运行结果为:

aaarticlea/png;base64,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" alt="" />

  baby1.HeartType和baby2.HeartType的引用地址是不一样的,和上面重新赋值对象的效果是一样的,但是我们调用的时候没有做额外的操作,就可以实现此效果,但是序列化和反序列化是比较耗时的,这点也需要注意下。

  示例代码下载:Prototype.rar

后记

  关于创建型模式上面几篇说的差不多,还有个针对工厂方法模式出现问题的解决方案,下面就是结构型模式了,还在学习中,未完待续。。。

上一篇:Windows服务中用Timer和线程两种方式来执行定时任务


下一篇:jasper ireport create a report with parameters without sql query