如何验证网站,服务器系统,网站的网站制作,wordpress登录验证失败介绍 原型模式#xff08;Prototype Pattern#xff09;#xff1a;用原型实例指定创建对象的种类#xff0c;并通过拷贝这些原型创建新的对象。 原型模式用于创建重复的对象#xff0c;同时又能保证性能。当直接创建对象的代价比较大时#xff0c;则采用这种模式。…介绍 原型模式Prototype Pattern用原型实例指定创建对象的种类并通过拷贝这些原型创建新的对象。 原型模式用于创建重复的对象同时又能保证性能。当直接创建对象的代价比较大时则采用这种模式。例如一个对象需要在高代价的数据库操作之后被创建并结合缓存机制在下一次请求时返回它的克隆对象在需要的时候更新数据库以此来减少数据库调用。 原型模式的核心就是原型类原型类需要具备以下两个条件 ·实现Cloneable接口。 Java中的Cloneable接口作用只有一个在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone()方法。在JVM中只有实现了这个接口的类才可以被拷贝否则在运行时会抛出CloneNotSupportedException异常。 ·重写Object类中的clone()方法。 Object类中的clone()方法作用是返回对象的一个拷贝但是其作用域protected类型的一般的类无法调用因此Prototype类需要clone()方法的作用域修改为public 。
深拷贝与浅拷贝
《Java常用设计模式————原型模式二之深拷贝与浅拷贝》
应用场景 使用原型模式创建对象比直接new一个对象在性能上要好的多因为Object类的clone方法是一个本地方法它直接操作内存中的二进制流特别是复制大对象时性能的差别非常明显。 使用原型模式的另一个好处是简化对象的创建使得创建对象就像我们在编辑文档时的复制粘贴一样简单。 因为以上优点所以在需要重复地创建相似对象时可以考虑使用原型模式。比如需要在一个循环体内创建对象假如对象创建过程比较复杂或者循环次数很多的话使用原型模式不但可以简化创建过程而且可以使系统的整体性能提高很多。
优缺点
优点
1.将产品的创建过程封装起来客户端不需要了解产品的具体创建流程。
2.性能提高逃避构造函数的约束尤其是那些很复杂的对象的时候。
3.可以在不修改其他代码的情况下添加新的产品符合“开闭原则”。
缺点
1.配备克隆方法需要对类的功能进行通盘考虑这对于新的类不一定容易特别当一个类引用不支持串行化的间接对象或者引用含有循环结构的时候。
2.必须实现一个特定接口。
3.每一个类都必须有一个clone方法如果这个类的组成不太复杂的话还比较好如果类的组成很复杂的话如果想实现深度复制就比较困难了。
代码实现
第一步创建原型类
package design.pattern.prototype;
/*** 原型模式实现类* * br类名ConcretePrototypebr* 作者 mhtbr* 日期 2018年3月31日-上午10:14:00br*/
public class ConcretePrototype extends Prototype{public void show() {System.out.println(原型模式实现类...);}
}
第二步实现原型类继承
package design.pattern.prototype;
/*** 原型类* br类名Prototypebr* 作者 mhtbr* 日期 2018年3月31日-上午10:12:48br*/
public abstract class Prototype implements Cloneable{Overrideprotected Object clone() {try {return super.clone();} catch (Exception e) {e.printStackTrace();}return null;}
}测试
package design.pattern.prototype;public class Client {public static void main(String[] args) {ConcretePrototype cp new ConcretePrototype();for (int i 0; i 10; i) {ConcretePrototype c (ConcretePrototype) cp.clone();c.show();}}
}输出结果
原型模式实现类...
原型模式实现类...
原型模式实现类...
原型模式实现类...
原型模式实现类...
原型模式实现类...
原型模式实现类...
原型模式实现类...
原型模式实现类...
原型模式实现类...