酷代码 AI
菜单
服务商

java实现 原型模式二维空间的圆circle具有原点p和半径r,原点p是point类型,point类具有x,y两个属性,代表点的坐标,对圆进行浅克隆

原型模式是一种创建型设计模式,它允许你通过复制现有对象来创建新对象,而无需从头开始构造。在Java中,可以通过实现`Cloneable`接口并重写`clone`方法来实现浅克隆。 下面是一个示例,展示了如何使用原型模式实现一个二维空间中的圆(`Circle`)和点(`Point`),并对圆进行浅克隆。 Point 类 ```java public class Point implements Cloneable { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public String toString() { return "Point{" + "x=" + x + ", y=" + y + '}'; } } ``` Circle 类 ```java public 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 protected Object clone() throws CloneNotSupportedException { // 浅克隆,只复制对象本身,不复制引用的对象 Circle clonedCircle = (Circle) super.clone(); return clonedCircle; } @Override public String toString() { return "Circle{" + "origin=" + origin + ", radius=" + radius + '}'; } } ``` 测试代码 ```java public class PrototypePatternDemo { public static void main(String[] args) { try { Point originalPoint = new Point(0, 0); Circle originalCircle = new Circle(originalPoint, 5.0); System.out.println("Original Circle: " + originalCircle); // 浅克隆 Circle clonedCircle = (Circle) originalCircle.clone(); System.out.println("Cloned Circle: " + clonedCircle); // 修改原始圆的原点 originalCircle.getOrigin().setX(10); originalCircle.getOrigin().setY(10); System.out.println("Modified Original Circle: " + originalCircle); System.out.println("Cloned Circle after modification: " + clonedCircle); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } ``` 输出结果 ``` Original Circle: Circle{origin=Point{x=0, y=0}, radius=5.0} Cloned Circle: Circle{origin=Point{x=0, y=0}, radius=5.0} Modified Original Circle: Circle{origin=Point{x=10, y=10}, radius=5.0} Cloned Circle after modification: Circle{origin=Point{x=10, y=10}, radius=5.0} ``` 解释 - 浅克隆:在浅克隆中,`Circle`对象被复制了,但其内部的`Point`对象没有被复制。原始圆和克隆圆共享同一个`Point`对象。 - 修改原点:当修改原始圆的原点时,克隆圆的原点也会随之改变,因为它们引用的是同一个`Point`对象。 如果你需要实现深克隆(即复制所有引用的对象),可以在`Circle`类的`clone`方法中手动克隆`Point`对象。例如: ```java @Override protected Object clone() throws CloneNotSupportedException { Circle clonedCircle = (Circle) super.clone(); clonedCircle.origin = (Point) origin.clone(); return clonedCircle; } ``` 这样,克隆的圆将拥有一个新的`Point`对象,而不是共享原始圆的`Point`对象。 [2024-11-07 16:28:02 | AI写代码神器 | 920点数解答]

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