【JAVA面试题】设计模式之原型模式
- IT业界
- 2025-09-15 09:06:02

【JAVA面试题】设计模式之原型模式 一、原型模式核心概念
原型模式(Prototype Pattern) 是一种创建型设计模式,通过复制现有对象(原型)来创建新对象,避免反复初始化带来的性能损耗。适用于需要高频创建相似对象的场景。
二、原型模式实战案例:敌机生成优化 1. 原始方案性能缺陷 public class Client { public static void main(String[] args) { List<EnemyPlane> enemyPlanes = new ArrayList<>(); for (int i = 0; i < 50; i++) { // 每次new对象导致性能损耗 EnemyPlane ep = new EnemyPlane(new Random().nextInt(200)); enemyPlanes.add(ep); } } }
问题:循环内频繁实例化对象,触发类加载、初始化等流程,性能低下。
2. 原型模式优化实现 2.1 实现Cloneable接口 public class EnemyPlane implements Cloneable { private int x; private int y = 0; public EnemyPlane(int x) { this.x = x; } // 开放坐标修改(克隆后调整状态) public void setX(int x) { this.x = x; } @Override public EnemyPlane clone() throws CloneNotSupportedException { return (EnemyPlane) super.clone(); // JVM内存拷贝,效率极高 } } 2.2 原型工厂封装 public class EnemyPlaneFactory { private static EnemyPlane protoType = new EnemyPlane(200); // 原型实例 public static EnemyPlane getInstance(int x) throws CloneNotSupportedException { EnemyPlane clone = protoType.clone(); clone.setX(x); // 调整克隆体坐标 return clone; } }
优势:克隆仅需0 - 1 ms,相比new操作(10~50ms)性能提升10倍以上。
三、深浅拷贝核心问题与解决方案
浅拷贝:只复制对象的值类型字段和引用类型字段的地址,导致多个对象共享同一个引用对象。
深拷贝:不仅复制对象的值类型字段,还会递归复制引用类型字段的实际对象,确保每个对象都有独立的引用对象。
1. 浅拷贝陷阱当对象包含引用类型字段时:
public class EnemyPlane implements Cloneable { private Bullet bullet = new Bullet(); // 引用类型 // ... @Override public EnemyPlane clone() { return (EnemyPlane) super.clone(); // 浅拷贝:bullet地址被复制 } }问题:克隆后的敌机会共享同一颗子弹对象,修改任意克隆体的子弹属性会影响所有实例。
2. 深拷贝实现 public class EnemyPlane implements Cloneable { private Bullet bullet; @Override public EnemyPlane clone() throws CloneNotSupportedException { EnemyPlane clone = (EnemyPlane) super.clone(); // 浅拷贝:复制值类型字段和引用地址 clone.bullet = this.bullet.clone(); // 深拷贝:递归克隆引用对象 return clone; } } // Bullet也需实现Cloneable public class Bullet implements Cloneable { @Override public Bullet clone() throws CloneNotSupportedException { return (Bullet) super.clone(); } }
关键点:
所有嵌套对象都需实现Cloneable递归调用clone方法形成克隆链四、原型模式应用场景 场景说明对象创建成本高如需要复杂初始化的网络连接对象高频创建相似对象游戏中的子弹/敌机生成、文档模板克隆需要隔离对象创建细节不希望调用方依赖具体类构造函数
五、面试要点总结
原型模式核心价值
避免重复初始化,提升对象创建性能简化复杂对象创建流程深浅拷贝区别
浅拷贝:复制值类型+引用地址(共享引用对象)深拷贝:完全复制值类型和引用对象(递归克隆)实现深拷贝的三种方式
递归实现Cloneable(如本文示例)序列化/反序列化(实现Serializable)使用第三方库(Apache Commons Lang3)JDK中的原型应用
ArrayList.clone()Arrays.copyOf()注意事项
深拷贝可能引发循环引用问题需要处理final字段的特殊情况考虑使用原型管理器管理多种原型【JAVA面试题】设计模式之原型模式由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【JAVA面试题】设计模式之原型模式”
下一篇
              Oracle11g的部署配置
 
               
               
               
               
               
              ![P9420[蓝桥杯2023国B]子2023/双子数--2024冲刺蓝桥杯省一](/0pic/pp_86.jpg) 
               
               
   
   
   
   
   
   
   
   
  