原型模式(Prototype)用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
Prototype Pattern也是一种创建型模式,它关注的是大量相同或相似对象的创建问题。应用原型模式就是建立一个原型,然后通过对原型来进行复制的方法,来产生一个和原型相同或相似的新对象,或者说用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
public abstract class Propertype
{
public abstract Propertype Clone();
}
public class ConcretePrototype : Propertype
{
public override Propertype Clone()
{
return (Propertype)this.MemberwiseClone();
}
}
class Program
{
static void Main(string[] args)
{
ConcretePrototype p = new ConcretePrototype();
p.Clone();
}
}
情形:
◊ 当一个系统应该独立于它的产品创建、构成和表示时;
◊ 当要实例化的类是在运行时刻指定时,例如通过动态装载来创建一个类;
◊ 为了避免创建一个与产品类层次平行的工厂类层次时;
◊ 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并Clone它们可能比每次用合适的状态手工实例化该类更方便一些。
特点:
◊ 对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目;
◊ 允许客户只通过注册原型实例就可以将一个具体产品类并入到系统中,客户可以在运行时刻建立和删除原型;
◊ 减少了子类的构造。原型模式是Clone一个原型而不是请求工厂方法创建一个,所以它不需要一个与具体产品类平行的Creator类层次;
◊ 原型模式具有给一个应用软件动态加载新功能的能力。由于Prototype的独立性较高,可以很容易动态加载新功能而不影响旧系统;
◊ 产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何的等级结构;
◊ 原型模式的最重要缺点就是每一个类必须配备一个Clone方法,而且这个Clone方法需要对类的功能进行通盘考虑。这对全新的类来说不是很难,但对已有的类进行改造时,不一定是容易的事。