1、 原型模式实现机制
原型模式在设计模式中相对比较简单,它直接通过实现 Cloneable接口,再重写 clone()方法返回想要的对象就OK 了。
一起来看下代码 :
public class ProtoType implements Cloneable {
public ProtoType(){
System.out.println("new ");
}
/**
* 重写clone
* @return
* @throws CloneNotSupportedException
*/
@Override
protected Object clone() throws CloneNotSupportedException {
System.out.println("clone");
return (ProtoType)super.clone();
}
//测试 : 依次打印 new clone
public static void main(String[] args) throws CloneNotSupportedException {
//通过new 方式
ProtoType protoType = new ProtoType();
//通过clone方式,注意不走构造函数
ProtoType protoType2 =(ProtoType) protoType.clone();
// false 两个对象是不同引用
System.out.println(protoType ==protoType2);
}
}
可以看到,我们需要多少对象,直接调用clone()克隆即可。
2、优缺点分析
优点: 它是在运行时操作对象,操作的是内存中的二进制流,在创建大对象时,相比 new 一个对象,性能优势明显。
缺点:必须实现Cloneable接口
3、使用场景
希望以一个对象为原型,创建其他近似的对象的时候;
代码优化场景, 业务中用的比较少,一般很少单独使用,会结合工厂方法模式使用;
多个调用者使用时,并且需要修改对象中的值,可以考虑原型模式来提供对象;
ok,很简单吧🤙🤙🤙