? ? ? ?原型模式(Prototype Pattern)是一种创建型设计模式,它提供了一种创建新对象的机制,通过复制已有对象来创建具有相同或相似状态的新对象。这种模式允许我们通过克隆现有的实例来快速创建新的对象,而不是每次都通过构造函数初始化一个新的对象。
clone()
?方法)。任何需要被复制的对象都必须实现这个接口。Prototype
?接口的具体类。当调用?clone()
?方法时,它们负责创建自己的一个副本。? java 示例代码
// 抽象原型接口
interface Prototype {
Prototype clone();
}
// 具体原型类1:Shape
class Shape implements Prototype {
private String type;
public Shape(String type) {
this.type = type;
}
public String getType() {
return type;
}
// 重写clone方法以实现深拷贝(假设类型为基本类型或不可变对象,如果是复杂对象则需要处理引用)
@Override
public Prototype clone() {
try {
return (Prototype) super.clone(); // 调用Object的clone方法
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Cloning is not supported", e);
}
}
}
// 具体原型类2:Circle,继承自Shape
class Circle extends Shape {
private int radius;
public Circle(String type, int radius) {
super(type);
this.radius = radius;
}
public int getRadius() {
return radius;
}
// 重写clone方法以复制所有成员变量
@Override
public Prototype clone() {
Circle clonedCircle = (Circle) super.clone();
// 如果radius是引用类型,则需要进行深拷贝操作,这里假设它是基础类型
return clonedCircle;
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
// 创建一个原型对象
Circle circle = new Circle("Circle", 5);
// 使用原型模式克隆对象
Prototype clonedCircle = circle.clone();
System.out.println("Original Circle Type: " + circle.getType());
System.out.println("Cloned Circle Type: " + clonedCircle.getType());
// 假设已经覆盖了getRadius方法,可以访问到克隆后的对象属性
System.out.println("Original Circle Radius: " + ((Circle) circle).getRadius());
System.out.println("Cloned Circle Radius: " + ((Circle) clonedCircle).getRadius());
}
}
? 在Java中,为了实现原型模式,通常需要让具体原型类实现?Cloneable
?接口并重写?Object
?类中的?clone()
?方法,以便正确实现深拷贝或浅拷贝功能。同时,还需要注意处理好引用类型成员变量的复制问题,以防止不同对象之间的引用混乱。?