定义
原型模式(Prototype Pattern):指定使用原型实例创建的对象类型,并通过复制此原型创建新对象。
C#例子
[Serializable]
public class Sheep : ICloneable
{
public string Name { get; set; }
public List<Sheep> Children { get; set; }
public Sheep(string name)
{
this.Name = name;
Children = new List<Sheep>();
}
/// <summary>
/// 通过ICloneable接口实现
/// </summary>
/// <returns></returns>
public object Clone()
{
return new Sheep(Name);
}
/// <summary>
/// MemberwiseClone 实现浅拷贝
/// </summary>
/// <returns></returns>
public Sheep Clone1()
{
return this.MemberwiseClone() as Sheep;
}
/// <summary>
/// 二进制序列化实现深拷贝
/// </summary>
/// <returns></returns>
public Sheep Clone2() {
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, this);
stream.Position = 0;
return formatter.Deserialize(stream) as Sheep;
}
}
原型模式参与者:
- ICloneable:通过实现接口,自主选择新对象继承原来对象的属性。
- MemberwiseClone:浅拷贝,拷贝值类型,引用类型和原来一样。
- formatter:实现深拷贝,不仅仅拷贝了值类型,引用类型里的值也重新拷贝了一份。
原型模式适用情形
- 当在运行时通过动态加载指定要实例化的类时
- 当对象创建比克隆成本高时
原型模式特点
- 它允许您创建一个现有对象的副本,并根据您的需要修改它,而不是经历从头创建和设置对象的麻烦。
- 当一个类的实例只能有几个不同的状态组合中的一个时。安装相应数量的原型并克隆它们可能更方便,而不是每次以适当的状态手动实例化类。
其他
深拷贝
浅拷贝
源码地址
其他设计模式