一、原型模式简介(Brief Introduction)
原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。<?XML:NAMESPACE PREFIX = O />
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、原型模式结构
<?XML:NAMESPACE PREFIX = V />

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 sha<?XML:NAMESPACE PREFIX = ST2 />llow 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 <?XML:NAMESPACE PREFIX = ST1 />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、实例运行结果

原型模式详解
本文介绍了原型模式的基本概念,探讨了其应用场景,并提供了实现该模式的代码示例。文章详细解释了浅复制与深复制的区别,展示了如何利用.NET中的ICloneable接口实现原型模式。

被折叠的 条评论
为什么被折叠?



