练习:原型模式 宠物乐园游戏中有一个复制魔法,可以将游戏中的物体复制一份,现在对一个狗狗房子施魔法,房子中的狗狗也一并被复制了,请用原型模式模拟对狗狗房子的复制(请不要采用序列化的方式)
时间: 2024-10-12 10:12:12 浏览: 13
原型模式是一种设计模式,它用于创建新对象,而无需知道新对象的确切类。在宠物乐园的游戏场景中,我们可以使用原型模式来实现狗狗房子的复制。首先,我们需要定义一个`DogHouse`类作为原型,包含狗狗的信息以及复制功能。
```java
// 定义DogHouse类作为原型
public abstract class DogHouse {
private String dogName;
protected abstract Dog createDogCopy();
public DogHouse(String dogName) {
this.dogName = dogName;
}
// 模拟复制方法
public DogHouse copy() {
try {
return (DogHouse) getClass().getDeclaredMethod("copy").invoke(this);
} catch (ReflectiveOperationException e) {
throw new RuntimeException("Failed to clone", e);
}
}
public void addDog(Dog dog) {
dogs.add(dog);
}
// 省略其他属性和getter/setter
}
// 具体实现Dog类
class RealDogHouse extends DogHouse {
private List<Dog> dogs;
@Override
protected Dog createDogCopy() {
return new Dog(dogName); // 创建新的狗狗实例
}
}
// Dog类
class Dog {
private String name;
// 构造函数、getter和setter省略
}
```
当玩家使用复制魔法时,他们实际上是调用了`DogHouse`的`copy()`方法,该方法通过反射机制调用`createDogCopy()`方法,实现了狗狗房子及其内部狗狗的克隆。这种方式不需要知道具体的实现细节,提高了代码的灵活性和复用性。
阅读全文