Java设计模式——原型模式(Prototype Pattren)
一、原型设计模式定义
定义:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
二、原型设计模式的使用场合
1》产生对象过程比较复杂,初始化需要许多资源时;
2》希望框架原型和产生对象分开时;
3》同一个对象可能会供其他调用者同时调用访问时。
原型设计模式,在一个现有的对象实例基础之上建立另外一个新对象,而不是利用类来产生新对象。首先由现有的对象产生大量共有信息,然后通过复制产生新的副本(注意该副本和原始对象只是拥有相同的数据而已,并不是同一个对象),通过修改部分的细节信息生成个性对象。这样,使创建对象的过程大大简化,省去了过多的繁文缛节,免去了在创建对象时初始化数据的行为。原型模式一般是和工厂方法模式一起使用的,工厂负责提供克隆对象给应用程序的调用者。
三、原型设计模式类图
1》Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。
2》ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
3》Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。
四、原型设计模式优点
1》当创建对象的实例较为复杂的时候,使用原型模式可以简化对象的创建过程,通过复制一个已有的实例可以提高实例的创建效率。
2》扩展性好,由于原型模式提供了抽象原型类,在客户端针对抽象原型类进行编程,而将具体原型类写到配置文件中,增减或减少产品对原有系统都没有的影响。
3》原型模式提供了简化的创建结构,工厂方法模式常常需要有一个与产品类型等级结构相同的工厂等级结构,而原型模式不需要这样,原型模式中产品的复制是通过封装在类中的克隆方法实现的,无需要专门的工厂类来创建产品。
4》可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份并将其状态保存起来,以便在需要的时候使用(恢复到历史某一状态),可辅助事项撤销操作。
五、原型设计模式缺点
1》需要为每一个类配置一个克隆方法,而且该克隆方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违反了开闭原则。
2》在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重签到引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来会比较麻烦。