原型模式其实很简单,就是利用Java提供的Clonable接口实现对象的复制。之所以叫原型模式,是因为我们在复制的时候需要一个原型或者模型。这种模式常用于创建的对象比较复杂的时候,我们可以直接在已有对象的基础上复制一个直接使用。在使用原型模式时,要考虑Java的深拷贝和浅拷贝。当需要深拷贝时,建议通过序列化来实现。举例说明通过图形缓存使用原型模式。先来看看UML:下面给出一个简单的图形缓冲区来演示原型模式(浅拷贝)。publicabstractclassShapeimplementsCloneable{privateStringid;protectedStringtype;abstractvoiddraw();//因为篇幅关系,这里省略了get和set方法//注意这段代码,重点在这里。@OverrideprotectedObjectclone(){Objectclone=null;try{clone=super.clone();}catch(CloneNotSupportedExceptione){e.printStackTrace();}returnclone;}}定义一个Circle来实现ShapepublicclassCircleextendsShape{publicCircle(){type="Circle";}@Overridevoiddraw(){System.out.println("InsideCircle::draw()method");}}定义了一个图形缓冲区,它存储创建的图形。当客户端需要一个新的图形时,直接从图形缓冲区中复制一个。publicclassShapeCache{privatestaticMap
