Java 实现二维空间圆 Circle 深克隆:序列化与手动克隆两种方法揭秘
以下是使用 Java 实现原型模式对具有原点 `Point` 和半径 `r` 的二维空间圆 `Circle` 进行深克隆的两种方法: 方法一:使用序列化和反序列化实现深克隆 ```java import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Point implements Serializable { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public int getY() { return y; } @Override public String toString() { return "Point{" + "x=" + x + ", y=" + y + '}'; } } class Circle implements Serializable { private Point origin; private int radius; public Circle(Point origin, int radius) { this.origin = origin; this.radius = radius; } public Point getOrigin() { return origin; } public int getRadius() { return radius; } @Override public String toString() { return "Circle{" + "origin=" + origin + ", radius=" + radius + '}'; } // 深克隆方法一:使用序列化和反序列化 public Circle deepClone() { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return (Circle) ois.readObject(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); return null; } } } public class DeepCopyExample { public static void main(String[] args) { Point origin = new Point(10, 20); Circle circle = new Circle(origin, 5); Circle clonedCircle = circle.deepClone(); // 修改原始圆的原点坐标 circle.getOrigin().setX(50); circle.getOrigin().setY(60); System.out.println("原始圆: " + circle); System.out.println("克隆圆: " + clonedCircle); } } ``` 方法二:手动实现深克隆 ```java import java.io.Serializable; class Point implements Serializable { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public Point deepClone() { return new Point(x, y); } public int getX() { return x; } public int getY() { return y; } @Override public String toString() { return "Point{" + "x=" + x + ", y=" + y + '}'; } } class Circle implements Serializable { private Point origin; private int radius; public Circle(Point origin, int radius) { this.origin = origin; this.radius = radius; } public Point getOrigin() { return origin; } public int getRadius() { return radius; } @Override public String toString() { return "Circle{" + "origin=" + origin + ", radius=" + radius + '}'; } // 深克隆方法二:手动实现 public Circle deepClone() { return new Circle(origin.deepClone(), radius); } } public class DeepCopyExample { public static void main(String[] args) { Point origin = new Point(10, 20); Circle circle = new Circle(origin, 5); Circle clonedCircle = circle.deepClone(); // 修改原始圆的原点坐标 circle.getOrigin().setX(50); circle.getOrigin().setY(60); System.out.println("原始圆: " + circle); System.out.println("克隆圆: " + clonedCircle); } } ``` ######[AI写代码神器 | 1021点数解答 | 2024-11-10 16:03:19]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)356
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)323
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)438
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)337
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1232
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)569
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)383
- HTML 基本页面代码分析:如何改进简单无序列表(字节豆包 | 118点数解答 | 2024-12-25 17:14:21)266
- 简单 HTML 页面优化指南:丰富无序列表与页面内容(字节豆包 | 116点数解答 | 2024-12-25 17:14:24)215
- 从简单 HTML 代码到功能丰富页面:一个无序列表的改进秘籍(字节豆包 | 147点数解答 | 2024-12-25 17:14:26)233
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)313
- Java:从接口设计到实现,打造输出“are you ok!”的程序实例 (字节豆包 | 176点数解答 | 2025-01-03 09:14:03)261