如何自己创建一个网站,电子商务网站开发技术,微信商城网站开发,网站开发网站源码原型模式#xff08;Prototype Pattern#xff09;是用于创建重复的对象#xff0c;同时又能保证性能。这种类型的设计模式属于创建型模式#xff0c;它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口#xff0c;该接口用于创建当前对象的克隆。当直接… 原型模式Prototype Pattern是用于创建重复的对象同时又能保证性能。这种类型的设计模式属于创建型模式它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时则采用这种模式。例如一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象在下一个请求时返回它的克隆在需要的时候更新数据库以此来减少数据库调用。
原型模式适用于以下情况
当创建对象的成本很高而通过复制已有对象可以降低成本时可以使用原型模式。当需要避免对类进行多次实例化而只是通过复制已有对象来创建新对象时可以使用原型模式。当需要动态地添加或删除对象时可以使用原型模式。 在实现原型模式时一般会使用原型接口或抽象类来定义克隆方法并由具体的原型类实现该方法。通过调用克隆方法我们可以复制原型对象并创建新的对象。 需要注意的是在使用原型模式时克隆出来的新对象与原型对象之间是独立的它们不共享任何引用类型的成员变量。如果需要共享成员变量可以考虑深拷贝或其他方式来实现。 原型模式中有三个登场角色
原型角色定义用于复制现有实例来生成新实例的方法
// 以贴主示例代码为例
implements Cloneable // 1.抽象类或者接口实现 java.lang.Cloneable 接口
public Shape clone(); // 2.定义复制现有实例来生成新实例的方法
具体原型角色实现用于复制现有实例来生成新实例的方法
public Shape clone() {// 2.实现复制现有实例来生成新实例的方法也可以由超类完成Shape clone null;try {clone (Shape) clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return clone;
}
使用者角色维护一个注册表并提供一个找出正确实例原型的方法。最后提供一个获取新实例的方法用来委托复制实例的方法生成新实例。
private static HashtableString, Shape shapeMap new HashtableString, Shape();//维护一个注册表public static void loadCache() {Circle circle new Circle();circle.setId(1);shapeMap.put(circle.getId(),circle);Square square new Square();square.setId(2);shapeMap.put(square.getId(),square);Rectangle rectangle new Rectangle();rectangle.setId(3);shapeMap.put(rectangle.getId(),rectangle);
}
public static Shape getShape(String shapeId) {//提供一个获取新实例的方法Shape cachedShape shapeMap.get(shapeId);//提供一个找出正确实例原型的方法return (Shape) cachedShape.clone();//委托复制实例的方法生成新实例。
}