Java 原型模式:二维空间圆的浅克隆实现
在Java中,实现原型模式通常需要使用`Cloneable`接口,并重写`clone`方法。对于一个二维空间中的圆(`Circle`),我们可以定义一个`Point`类来表示圆的原点,并在`Circle`类中实现浅克隆。 以下是一个示例代码: ```java // Point类表示二维空间中的一个点 class Point implements Cloneable { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } @Override public Point clone() { try { return (Point) super.clone(); } catch (CloneNotSupportedException e) { throw new AssertionError("Clone not supported for Point", e); } } @Override public String toString() { return "Point{" + "x=" + x + ", y=" + y + '}'; } } // Circle类表示一个圆,包含一个Point类型的原点和一个半径 class Circle implements Cloneable { private Point origin; private double radius; public Circle(Point origin, double radius) { this.origin = origin; this.radius = radius; } public Point getOrigin() { return origin; } public void setOrigin(Point origin) { this.origin = origin; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } @Override public Circle clone() { try { // 浅克隆:只克隆对象本身,不克隆其引用的对象 Circle clonedCircle = (Circle) super.clone(); // 克隆原点 clonedCircle.origin = this.origin.clone(); return clonedCircle; } catch (CloneNotSupportedException e) { throw new AssertionError("Clone not supported for Circle", e); } } @Override public String toString() { return "Circle{" + "origin=" + origin + ", radius=" + radius + '}'; } } public class PrototypePatternDemo { public static void main(String[] args) { Point originalPoint = new Point(0, 0); Circle originalCircle = new Circle(originalPoint, 5); System.out.println("Original Circle: " + originalCircle); // 浅克隆 Circle clonedCircle = originalCircle.clone(); System.out.println("Cloned Circle: " + clonedCircle); // 修改克隆后的圆的原点 clonedCircle.getOrigin().setX(10); clonedCircle.getOrigin().setY(10); System.out.println("Modified Cloned Circle: " + clonedCircle); // 检查原始圆是否受到影响 System.out.println("Original Circle after modification: " + originalCircle); } } ``` 解释 1. Point类: - 实现了`Cloneable`接口。 - 重写了`clone`方法,返回一个新的`Point`对象,该对象与当前对象具有相同的`x`和`y`值。 2. Circle类: - 包含一个`Point`类型的原点和一个`double`类型的半径。 - 实现了`Cloneable`接口。 - 重写了`clone`方法,返回一个新的`Circle`对象,该对象与当前对象具有相同的原点和半径。注意,这里进行了浅克隆,即原点对象也进行了克隆,以确保克隆后的圆与其原点是独立的。 3. PrototypePatternDemo类: - 创建了一个原始的圆对象。 - 使用`clone`方法创建了一个克隆的圆对象。 - 修改克隆后的圆的原点,检查原始圆是否受到影响。 通过这种方式,我们实现了浅克隆,确保克隆后的对象与其原对象在某些方面是独立的。 ######[AI写代码神器 | 896点数解答 | 2024-11-07 16:26:16]
- 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
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)382
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)352
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)347
- Java 继承实现:重温经典剪刀石头布游戏(字节豆包 | 451点数解答 | 2024-10-20 19:57:58)485
- Java实现日期递增:无数据返20250901,遇20250901返20250902及开发注意要点 (DeepSeek | 242点数解答 | 2025-09-02 11:39:53)96
- 深度解析:Vue中MVVM模式的组成、原理与双向数据绑定优势 (阿里通义 | 249点数解答 | 2023-11-09 00:56:24)278
- Android开发:Kotlin实现Builder模式示例及优势解析(百度文心 | 456点数解答 | 2023-11-09 17:29:15)262
- 工程师必知:PO模式与Page Factory的深度解析(百度文心 | 132点数解答 | 2023-11-09 18:33:18)295
- 2026 年苍溪县印刷企业年报工作:现状、问题与未来举措(字节豆包 | 1245点数解答 | 2026-03-09 12:55:05)28