原型模式(Prototype)用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
Prototype Pattern也是一种创建型模式,它关注的是大量相同或相似对象的创建问题。应用原型模式就是建立一个原型,然后通过对原型来进行复制的方法,来产生一个和原型相同或相似的新对象,或者说用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
原型模式具有以下特点:
◊对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目;
◊允许客户只通过注册原型实例就可以将一个具体产品类并入到系统中,客户可以在运行时刻建立和删除原型;
◊减少了子类的构造。原型模式是Clone一个原型而不是请求工厂方法创建一个,所以它不需要一个与具体产品类平行的Creator类层次;
◊原型模式具有给一个应用软件动态加载新功能的能力。由于Prototype的独立性较高,可以很容易动态加载新功能而不影响旧系统;
◊产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何的等级结构;
◊原型模式的最重要缺点就是每一个类必须配备一个Clone方法,而且这个Clone方法需要对类的功能进行通盘考虑。这对全新的类来说不是很难,但对已有的类进行改造时,不一定是容易的事。
namespace CloneTest
{
public class CloneTest
{
public CloneTest() { }
public void CloneMember()
{
Member member = new Member()
{
UserName = "用户名",
NickName = "昵称",
Address = new Address()
{
Provice = "上海",
City = "上海市"
}
};
Member memberClone = (Member)member.Clone();
memberClone.UserName = "浅拷贝用户名";
//引用类型指向的是同一个地址,因此,member对象中的Provice的值也会变成“浅拷贝上海”
memberClone.Address.Provice = "浅拷贝上海";
}
}
public class Member : ICloneable
{
public string UserName { get; set; }
public string NickName { get; set; }
public Address Address { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
}
public class Address
{
public string Provice { get; set; }
public string City { get; set; }
}
}