Net设计模式实例之原型模式( Prototype Pattern)(1)
一、原型模式简介(Brief Introduction)
原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype。
浅复制与深复制区别:
浅复制,被复制的所有变量都还有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制,把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
Net命名空间System提供了一个IConeable接口,此接口只有一个方法Clone(),只需要实现这个接口就可以实现原型模式(Prototype Pattern)了。
二、解决的问题(What To Solve)
当一个对象生成不是通过New而是通过复制旧对象的时候,可以考虑使用原型模式。
三、原型模式分析(Analysis)
1、原型模式结构
Prototype类:原型类 Clone()方法:克隆自身的接口。
ConcretePrototypeA、ConcretePrototypeA类:原型类的具体实现。克隆一个自身的操作。
2、代码
1、原型抽象类Prototype
|
/// <summary>
/// 抽象原型模式类
/// </summary>
public abstract class Prototype
{
private string _id;
public Prototype(string id)
{
this.Id = id;
}
public string Id
{
get { return _id; }
set { _id = value; }
}
public abstract Prototype Clone();
}
|
2、具体实现类ConcretePrototypeA和ConcretePrototypeB
|
public class ConcretePrototypeA : Prototype
{
public ConcretePrototypeA(string id)
: base(id)
{ }
/// <summary>
/// Returns a shallow copy 浅拷贝
/// </summary>
/// <returns>a shallow copy</returns>
public override Prototype Clone()
{
return (Prototype)this.MemberwiseClone();
}
}
public class ConcretePrototypeB:Prototype
{
public ConcretePrototypeB(string id)
: base(id)
{ }
/// <summary>
/// a shallow copy
/// </summary>
/// <returns>浅拷贝</returns>
public override Prototype Clone()
{
return (Prototype)this.MemberwiseClone();
}
}
|
2、客户端代码
|
static void Main(string[] args)
{
Prototype pA = new ConcretePrototypeA("A");
Prototype cA = pA.Clone() as ConcretePrototypeA ;
Console.WriteLine("Cloned:"+cA.Id);
ConcretePrototypeB pB = new ConcretePrototypeB("B");
ConcretePrototypeB cB = (ConcretePrototypeB)pB.Clone();
Console.WriteLine("Cloned:"+cB.Id);
Console.ReadKey();
}
|
3、实例运行结果
本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/263880,如需转载请自行联系原作者