额 今天看的这个模式有点意思哈,原型模式。。。
定义:通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。
说到这里要讲一下深拷贝与浅拷贝的定义,深拷贝可以理解成复制一份一模一样的东西复制完后两个互相没有任何联系,而浅拷贝只是刻了一个长得一模一样的类,但是里面的值是共用的。也就是修改了一个类里面的值另外一个也会发送变化。
客户(Client)角色:客户类提出创建对象的请求。
抽象原型(Prototype)角色:这是一个抽象角色,通常由一个 C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在 C#中,抽象原型角色通常实现了 ICloneable 接口。
具体原型(ConcretePrototype)角色:被复制的对象。此角色需要实现抽象原型角色所要求的接口。
下面是带管理器的原型模式:
原型管理器(PrototypeManager)角色:创建具体原型类的对象,并记录每一个被创建的对象。
原型模式的优点:
1、Prototype 模式允许动态增加或减少产品类。由于创建产品类实例的方法是产品类内部具有的,因此增加新产品对整个结构没有影响。
2、Prototype 模式提供了简化的创建结构。工厂方法模式常常需要有一个与产品类等级结构相同的等级结构,而 Prototype 模式就不需要这样。
3、Portotype 模式具有给一个应用软件动态加载新功能的能力。由于 Prototype 的独立性较高,可以很容易动态加载新功能而不影响老系统。
4、产品类不需要非得有任何事先确定的等级结构,因为 Prototype 模式适用于任何的等级结构。
缺点:
Prototype 模式的主要缺点就是每一个类必须配备一个克隆方法。而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事。
额 看到这个原型模式,感觉就是在克隆自己。 就有一个抽象类 里面有一个克隆的虚方法,然后通过继承实现克隆自己。那么在外部调用的时候就可以直接通过抽象类 去调用不同的克隆对象。而不是对象本身。这个克隆可以是浅拷贝 也可以是深拷贝,但是具体使用场景不是很清楚。