• Java设计模式之原型模式


            原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。

            这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

    原型模式适用于以下情况:

    1. 当创建对象的成本很高,而通过复制已有对象可以降低成本时,可以使用原型模式。
    2. 当需要避免对类进行多次实例化,而只是通过复制已有对象来创建新对象时,可以使用原型模式。
    3. 当需要动态地添加或删除对象时,可以使用原型模式。

            在实现原型模式时,一般会使用原型接口或抽象类来定义克隆方法,并由具体的原型类实现该方法。通过调用克隆方法,我们可以复制原型对象并创建新的对象。

            需要注意的是,在使用原型模式时,克隆出来的新对象与原型对象之间是独立的,它们不共享任何引用类型的成员变量。如果需要共享成员变量,可以考虑深拷贝或其他方式来实现。

    原型模式中有三个登场角色:

    原型角色:定义用于复制现有实例来生成新实例的方法;

    1. // 以贴主示例代码为例
    2. implements Cloneable // 1.(抽象类或者接口)实现 java.lang.Cloneable 接口
    3. public Shape clone(); // 2.定义复制现有实例来生成新实例的方法

    具体原型角色:实现用于复制现有实例来生成新实例的方法

    1. public Shape clone() {// 2.实现复制现有实例来生成新实例的方法(也可以由超类完成)
    2. Shape clone = null;
    3. try {
    4. clone = (Shape) clone();
    5. } catch (CloneNotSupportedException e) {
    6. e.printStackTrace();
    7. }
    8. return clone;
    9. }

    使用者角色:维护一个注册表,并提供一个找出正确实例原型的方法。最后,提供一个获取新实例的方法,用来委托复制实例的方法生成新实例。

    1. private static Hashtable shapeMap = new Hashtable();//维护一个注册表
    2. public static void loadCache() {
    3. Circle circle = new Circle();
    4. circle.setId("1");
    5. shapeMap.put(circle.getId(),circle);
    6. Square square = new Square();
    7. square.setId("2");
    8. shapeMap.put(square.getId(),square);
    9. Rectangle rectangle = new Rectangle();
    10. rectangle.setId("3");
    11. shapeMap.put(rectangle.getId(),rectangle);
    12. }
    13. public static Shape getShape(String shapeId) {//提供一个获取新实例的方法
    14. Shape cachedShape = shapeMap.get(shapeId);//提供一个找出正确实例原型的方法
    15. return (Shape) cachedShape.clone();//委托复制实例的方法生成新实例。
    16. }

  • 相关阅读:
    论文详读《基于改进 LeNet-5 模型的手写体中文识别》,未完待补充
    TopoLVM: 基于LVM的Kubernetes本地持久化方案,容量感知,动态创建PV,轻松使用本地磁盘
    uniapp-秋云图表 ucharts echarts 对比与关系
    【SwiftUI项目】0011、SwiftUI项目-费用跟踪-记账App项目-第3/3部分 -日期指定选定-新增费用页面
    微信小程序日历插件对比
    分布式锁:5种方案解决商品超卖的方案
    基于深度学习的疫情期间网民情绪识别项目详解
    性能测试知多少---性能分析与调优的原理
    调试分析Linux 0.00引导程序
    需求管理手册-需求工程的流程环节(4)
  • 原文地址:https://blog.csdn.net/m0_57313444/article/details/132691852