认识创建型模式---原型模式

来源:互联网 发布:zr网络语言什么意思 编辑:程序博客网 时间:2024/05/04 07:55
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。当一个系统应该独立于它的产品创建、构成和表示时,就可以采用原型模式,当要实例化的类是在运行时刻指定时,像动态装载,或者为了避免一个与产品层次平行的工厂类层次时,或者当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆它们,可能要比每次用合适的状态手工实例化该类更方便一些。
interface Prototype{Prototype clone();}class ConcretePrototype1 implements Prototype{public Prototype clone(){Prototype prototype=new ConcretePrototype1();return prototype;}}class ConcretePrototype2 implements Prototype{public Prototype clone(){Prototype prototype=new ConcretePrototype2();return prototype;}}class Client{private Prototype prototype;public Client(Prototype prototype){this.prototype=prototype;}public void Operation(){Prototype copyPrototype=prototype.clone();}}public class Test{       public static void main(String[] args){new Client(new ConcretePrototype1()).Operation();}}        

该设计模式需要一个Prototype,声明一个克隆自身的接口,ConcretePrototype实现一个克隆自身的操作。Client让一个原型克隆自身从而创建一个新的对象。

该模式的一些优点有:

1.运行时刻增加和删除产品。原型模式允许只通过客户注册原型实例就可以将一个新的具体产品类加入到系统中,它比其他创建型模式更为灵活。

2.改变值以指定新对象,高度动态的系统允许你通过对象复合定义新的行为,通过为一个对象变量指定值不定义新的类。

3.改变结构以指定新对象,许多应用由部件和子部件来构建新对象。在一个电路设计编辑器中,就是用子电路来构造电路的。在原型设计模式中,我们就可以把子电路作为一个原型增加到可用的电路元素选择板中。

4.减少子类的构造,工厂方法经常产生一个与产品类平行的Creator类层次,而原型模式使得你只需要克隆一个原型而不是去请求一个工厂方法去产生一个新的对象。这一优点主要适用于C++这样不将类作为一级类对象的语言,对于面向对象的语言而言,从这个模式获益较少了,因为我们总是可以将一个类对象作为生成者,在这类语言中,类对象已经起到跟原型一样的作用了。

5.用类动态配置应用,一些运行时刻环境允许你动态的将类装载到应用中。                                                            

原创粉丝点击