版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38361347/article/details/85089240
java设计模式之原型模式
原型模式属于创建型模式之一,用于创建重复的对象,即可以保证性能又能创建对象!
什么时候采用此种设计模式,当我们创建对象代价比较大的时候,我们就可以采用这种方法,用来创建对象。
原意义上是通过对对象的拷贝从而达到创建对象的目的。
具体实现步骤:
首先创建一个抽象接口类:
/**
* 原型模式
* 当创建对象代价较大时采用这种模式,创建对象。
* 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
*
* 克隆对象
*/
//抽象类
public abstract class PrototypeAbstract implements Cloneable{
protected String name;
private String grade;
abstract void doTest();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
//克隆对象
@Override
protected Object clone() throws CloneNotSupportedException {
Object object = null;
if(object==null){
object = super.clone();
}
return object;
}
}
实现类
public class Shape extends PrototypeAbstract {
@Override
void doTest() {
System.out.println("shape...");
}
public Shape() {
name="shape";
}
}
核心代码
首先创建一个map用来保存对象
buildObject方法是用来创建对象,并且是static 无论外面条用多少次,始终对象保持只有一个。
然后对外提供获取对象的方法,从map中得到对象,调用clone方法,将对象克隆复制一份,返回给调用者。
public class ShapeCache {
//存储对象
private static Map<String,PrototypeAbstract> map = new Hashtable<>();
//对外提供获取对象的方法
public static PrototypeAbstract getPrototype (String id){
//获取对象
PrototypeAbstract prototypeAbstract = map.get(id);
Object clone = null;
try {
//将获取到的对象直接克隆一个返回给调用者
clone = prototypeAbstract.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return (PrototypeAbstract) clone;
}
//创建对象
public static void buildObject(){
//原对象
PrototypeAbstract prototypeAbstract = new Shape();
prototypeAbstract.setName("shape");
prototypeAbstract.setGrade("shape");
//可以多个创建...
//存储
map.put(prototypeAbstract.getGrade(),prototypeAbstract);
}
}
测试方法
public class Test {
//原型模式创建对象测试
public static void main(String[] args) {
//创建对象,只需创建一次
ShapeCache.buildObject();
//获取对象
Shape prototype = (Shape) ShapeCache.getPrototype("shape");
System.out.println(prototype.getName());
}
}
这样做的目的,避免大量重复创建对象,对象创建一次,需要用的时候直接进行拷贝克隆!