原型模式的实现以及遇到的问题
clone、equals实现的设计
看到原型模式,想验证一下相关接口
首先实现克隆模式
要覆写 clone和equals接口
clone的实现及测试
public class Prototype {
String name;
public Prototype() {
}
public Prototype(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Prototype clone() {
return new Prototype(name);
}
public boolean equals(Prototype prototype) {
return this.name.equals(prototype.getName());
}
public static void main(String[] args) {
Prototype p1 = new Prototype();
p1.setName("p1");
Prototype p2 = null;
p2 = p1.clone();
System.out.println("验证equals和clone");
p2.setName("p1");
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p1 == p2);
System.out.println(p1.equals(p2));
System.out.println("=========分割线=======");
System.out.println("验证是不是同一个对象:");
p2.setName("p2");
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println("=========分割线=======");
System.out.println("验证equals和clone");
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p1 == p2);
System.out.println(p1.equals(p2));
}
}
结果:
验证equals和clone
p1
p1
false
true
=========分割线=======
验证是不是同一个对象:
p1
p2
=========分割线=======
验证equals和clone
p1
p2
false
false
Process finished with exit code 0
发现的问题
重写接口的时候返回值可以为原方法的子类,可以不声明抛异常
重写clone接口的时候
public Prototype clone() 继承自 protected native Object clone() throws CloneNotSupportedException;
转换类型和抛出异常不用处理,可以实现继承
不知道为何重写equals没有提示为重写方法(没有提示为继承父类object方法)
在重写一个类的构造方法的时候,要全部构造方法重写
举个例子:
默认无参构造,有参构造不能用,要手写有参构造
只重写有参构造,无参构造就不可用了,需要手动把无参构造空方法写上去