以下是使用 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); } } ``` [2024-11-10 16:03:19 | AI写代码神器 | 1021点数解答]