1.原型模式代码
import java.util.HashMap;
import java.util.Map;
public abstract class CustFile implements Cloneable {
protected String name;
public Object clone(){
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
public void printName() {
System.out.println("-------"+hashCode()+"--------"+name+"-----");
}
public String getName() {
return name;
}
}
class A4File extends CustFile{
A4File(String name){
this.name = name;
}
}
class A2File extends CustFile{
A2File(String name){
this.name = name;
}
}
class A6File extends CustFile{
A6File(String name){
this.name = name;
}
}
class SysCache{
public static Map<String,CustFile> map = new HashMap<String,CustFile>();
public static Object getCustFile(String name){
CustFile custFile = map.get(name);
return custFile.clone();
}
public static void loadCache(){
A4File a4File = new A4File("A4");
map.put(a4File.getName(),a4File);
A2File a2File = new A2File("A2");
map.put(a2File.getName(),a2File);
A6File a6File = new A6File("A6");
map.put(a6File.getName(),a6File);
}
public static void main(String[] args) {
loadCache();
Object a21 = getCustFile("A2");
CustFile custFile = (CustFile)a21;
custFile.printName();
Object a22 = getCustFile("A2");
CustFile custFile0 = (CustFile)a22;
custFile0.printName();
Object a23 = getCustFile("A2");
CustFile custFile1 = (CustFile)a23;
custFile1.printName();
Object a24 = getCustFile("A2");
CustFile custFile2 = (CustFile)a24;
custFile2.printName();
}
}
2.关键点
原型模式主要是为了克隆一个类,主要的实现是实现cloneable 接口 同时写clone方法,调用super.clone().