原型模式:是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它听了一种创建对象的最佳方式。
这种模式实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时则采用这种模式。如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在一个请求是返回它的克隆,在需要时更新数据库,以此来减少数据库的调用。
使用场景:资源优化场景,类初始化需要消耗非常多的资源,这个资源宝库数据、硬件资源等。3.性能和安全要的场景 4.通过new产生一个对象需要非常繁琐的数据准备货访问权限,使用原型模式。5.一个对象多个修改则的场景。6.一个对象需要提供给其他对象访问,而且各个调用则可能需要修改其值是,可以考虑使用原型模式拷贝多个对象共调用者使用7.在实际项目中,原型模式很好单独出现
实现:
1.创建一个实现了Cloneable接口的抽象类
public abstract class Shape implements Cloneable{
private String id;
protected String type;
abstract void draw();
public String getType(){
return type;
}
public Object clone(){
Object clone=null;
try{
clone=super.clone();
}catch(cloneNotSuportedException e){
}
return clone;
}
}
2.创建扩展上面抽象类的实体类
public class Rectangle extends Shape{
public Rectangele(){
type="Rectangel";
}
void draw(){
sysout("Inside Rctangle");
}
}
public class Square extends Shape{
public square(){
type="square";
}
void draw(){
sysout("Inside square::draw() method");
}
3.创建一个类,从数据库获取实体类,并把它们存储在一个hashTable中
ShapeCache.java
public class ShapeCache{
private static Hashtable<String,Shape> shapeMap=new HasHtable<String ,shap> shapeMap=newHahstable<String,Shape>();
public static Shape getShape(Stirng shapeId){
Shape cachedShape=shapMap.get(shapeId);
return (Shape)cachedShape.clone();
}
public static void loadCache(){
Circle circle=new Circle();
circle.setId(1);
}
}