原型模式提供了确定对象种类的接口,客户端通过拷贝原型来创建重复的对象。
Java中原型模式的实现,即是使用clone方法。
例如我们有一个Cat类:
package com.DesignPolicyLearn.Prototype;
/*
* author:Tammy Pi
* function:猫类
*/
public class Cat {
private String name;
public Cat(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void display() {
System.out.println("My name is "+name);
}
public Object clone(){
return this;
}
}
用于测试的类:
package com.DesignPolicyLearn.Prototype;
/*
* author:Tammy Pi
* function:测试类
*/
public class Main {
public static void main(String[] args){
Cat cat1 = new Cat("JiaFei");
cat1.display();
Cat cat2 = (Cat) cat1.clone();
cat2.display();
}
}
这样我们就方便的创建多个重复的对象,而不需要new。不过需要注意的是,现在cat1和cat2的引用是一样的,也就是改了cat2里的值name,cat1的值name也就变化了。
如果不希望这样,希望他们是值相同引用不相同的两个对象,那么clone中应该这样写:
public Object clone(){
return new Cat(name);
}
个人认为,原型模式还蛮有用的。