列举一个原型模式的java代码实例,所有类写在一个类当中1
时间: 2024-02-29 21:53:10 浏览: 20
好的,以下是一个将所有类都写在一个类中的原型模式的 Java 代码实例:
```java
public class PrototypePatternExample {
public static void main(String[] args) {
Circle circle = new Circle(10, 20, 30);
Circle clonedCircle = circle.clone();
System.out.println("Original Circle: " + circle.toString());
System.out.println("Cloned Circle: " + clonedCircle.toString());
Square square = new Square(5);
Square clonedSquare = square.clone();
System.out.println("Original Square: " + square.toString());
System.out.println("Cloned Square: " + clonedSquare.toString());
}
public static abstract class Shape implements Cloneable {
private int x;
private int y;
public Shape(int x, int y) {
this.x = x;
this.y = y;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public abstract Shape clone();
@Override
public String toString() {
return "x: " + x + ", y: " + y;
}
}
public static class Circle extends Shape {
private int radius;
public Circle(int x, int y, int radius) {
super(x, y);
this.radius = radius;
}
public Circle(Circle circle) {
super(circle.getX(), circle.getY());
this.radius = circle.radius;
}
public void setRadius(int radius) {
this.radius = radius;
}
public int getRadius() {
return radius;
}
@Override
public Circle clone() {
return new Circle(this);
}
@Override
public String toString() {
return super.toString() + ", radius: " + radius;
}
}
public static class Square extends Shape {
private int side;
public Square(int x, int y, int side) {
super(x, y);
this.side = side;
}
public Square(int side) {
this(0, 0, side);
}
public Square(Square square) {
this(square.getX(), square.getY(), square.side);
}
public void setSide(int side) {
this.side = side;
}
public int getSide() {
return side;
}
@Override
public Square clone() {
return new Square(this);
}
@Override
public String toString() {
return super.toString() + ", side: " + side;
}
}
}
```
这里定义了一个 `Shape` 抽象类和两个具体子类 `Circle` 和 `Square`,它们都实现了 `Cloneable` 接口,表示它们支持克隆。`Shape` 类有两个属性:x 和 y,以及一个构造函数和一个抽象的 `clone()` 方法。具体子类 `Circle` 和 `Square` 分别有自己的属性和构造函数,以及重写了 `clone()` 和 `toString()` 方法。在 `Circle` 和 `Square` 的 `clone()` 方法中,调用了它们的复制构造函数来实现克隆。在 `main()` 方法中,我们创建了一个 `Circle` 对象和一个 `Square` 对象,并调用它们的 `clone()` 方法来获取它们的副本,最后输出它们的信息。