酷代码 AI
菜单
服务商

二维空间的圆circle具有原点p和半径r,原点p是point类型,point类具有x,y两个属性,代表点的坐标,对圆进行浅克隆,原型模式,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`方法创建了一个克隆的圆对象。 - 修改克隆后的圆的原点,检查原始圆是否受到影响。 通过这种方式,我们实现了浅克隆,确保克隆后的对象与其原对象在某些方面是独立的。 [2024-11-07 16:26:16 | AI写代码神器 | 896点数解答]

相关提问
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]