一、原型模式简介(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 sha
/// </summary>
/// <returns>a sha
public override Prototype
Clone()
{
return
(Prototype
)this
.MemberwiseClone();
}
}
public
class ConcretePrototypeB
:Prototype
{
public
ConcretePrototypeB(string
id)
: base
(id)
{ }
/// <summary>
/// a sha
/// </summary>
/// <returns>
浅拷贝
</returns>
public override Prototype
Clone()
{
return
(Prototype
)this
.MemberwiseClone();
}
}
|
2
、客户端代码
|
static
void
{
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,如需转载请自行联系原作者