在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配了多个一样的类实例对象,然后如果采用工厂模式来创建这样的系统的话,随着产品类的不断增加,导致子类的数量不断增多,反而增加了系统复杂程度,所以在这里使用工厂模式来封装类创建过程并不合适,然而原型模式可以很好地解决这个问题,因为每个类实例都是相同的,当我们需要多个相同的类实例时,没必要每次都使用new运算符去创建相同的类实例对象,此时我们一般思路就是想——只创建一个类实例对象,如果后面需要更多这样的实例,可以通过对原来对象拷贝一份来完成创建,这样在内存中不需要创建多个相同的类实例,从而减少内存的消耗和达到类实例的复用。 然而这个思路正是原型模式的实现方式。下面就具体介绍下设计模式中的原型设计模式。
第一步抽象我们原型
public abstract class Peoper {
///为了测试好看对象体
public string Id{get;set;}
public Peoper(string Id) {
this.Id=Id;
}
public abstract Peoper Clone();
}
第二步我们实现浅拷贝实现我们的复制
public class PeoperOne:Peoper {
public PeoperOne(string Id):base(Id);
pubilc Peoper Clone(){
return (Peoper ) this.MemberwiseClone();//实现Object浅拷贝 重点是就是这个拷贝
}
}
Test
class Client { static void Main(string[] args){ Peoper p=new PeoperOne("test"); Peoper pone=p.Clone() as PeoperOne; Console.WriteLine("Cloned1:\t"+pone.Id) Peoper ptwo=p.Clone() as PeoperOne; Console.WriteLine("Cloned2:\t"+ptwo.Id) } }