using System;
/// <summary>
/// 原形模式(ProtoType)
/// 用原形实例指定创建对象的种类,并且通过拷贝这些原形创建新的对象。
/// </summary>
namespace ProtoType_Pattern
{
//原形模式其实就是就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
/// <summary>
/// 抽象原形类,或 原形接口
/// 抽象类的关键是有一个Clone()方法
/// </summary>
abstract class Prototype
{
private string id;
public Prototype(string id)
{
this.id = id;
}
public string Id
{
get { return id; }
}
/// <summary>
/// 的定义一个抽象类或接口,必须有一个Clone方法
/// </summary>
/// <returns></returns>
public abstract Prototype Clone();
}
/// <summary>
/// 具体原形类
/// </summary>
class ConcretePrototype1 : Prototype
{
public ConcretePrototype1(string id) : base(id)
{
}
public override Prototype Clone()
{
///创建当前对象的浅表副本。
///方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。
///如果字段是值类型的,则对该字段执行逐位复制。
///如果是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其副本引用同一对象。
return (Prototype)this.MemberwiseClone();
//由于此方法是浅复制,若类中包含对象的引用就不能简单的使用此方法来实现。
//这时我们需要用到深复制
}
}
class Program
{
static void Main(string[] args)
{
ConcretePrototype1 p1 = new ConcretePrototype1("我");
//克隆类ConcretePrototype1的对象p1就能得到新的实例从c1
ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
Console.WriteLine("克隆:{0}",c1.Id);
Console.Read();
}
}
}
/// <summary>
/// 原形模式(ProtoType)
/// 用原形实例指定创建对象的种类,并且通过拷贝这些原形创建新的对象。
/// </summary>
namespace ProtoType_Pattern
{
//原形模式其实就是就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
/// <summary>
/// 抽象原形类,或 原形接口
/// 抽象类的关键是有一个Clone()方法
/// </summary>
abstract class Prototype
{
private string id;
public Prototype(string id)
{
this.id = id;
}
public string Id
{
get { return id; }
}
/// <summary>
/// 的定义一个抽象类或接口,必须有一个Clone方法
/// </summary>
/// <returns></returns>
public abstract Prototype Clone();
}
/// <summary>
/// 具体原形类
/// </summary>
class ConcretePrototype1 : Prototype
{
public ConcretePrototype1(string id) : base(id)
{
}
public override Prototype Clone()
{
///创建当前对象的浅表副本。
///方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。
///如果字段是值类型的,则对该字段执行逐位复制。
///如果是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其副本引用同一对象。
return (Prototype)this.MemberwiseClone();
//由于此方法是浅复制,若类中包含对象的引用就不能简单的使用此方法来实现。
//这时我们需要用到深复制
}
}
class Program
{
static void Main(string[] args)
{
ConcretePrototype1 p1 = new ConcretePrototype1("我");
//克隆类ConcretePrototype1的对象p1就能得到新的实例从c1
ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
Console.WriteLine("克隆:{0}",c1.Id);
Console.Read();
}
}
}