閒扯一下,我們都喫過月餅吧,那大家知道月餅是怎麼製作出來的嗎?(以前的工藝)
我小時候有經歷過月餅的製作,提前買好麪粉、糖、摸具、鴨蛋黃等,將麪粉揉成團然後再用杆搓成麪皮,將鴨蛋黃、糖配料什麼的一股腦的捲成一團,用麪皮包裹好,再使用模具整好形狀,烤至金黃,出鍋開喫。
Prototype模式(原型)
上面講的使用模具整理好月餅,也可以看做一個原型模式,我們製作模具的過程,就已經完成了一個形狀滿意的月餅,後面製作月餅都和前一個類似。
原型模式定義:通過“複製”一個已經存在的實例來返回新的實例,而不是新鍵實例。被複制的實例就是我們稱的“原型”。
- 複製一個實例相比new一個實例更加高效;
- 對於創建複製的對象或者說是幾個類整合到一起的對象,更加方便;
示例代碼
public class PrototypeTest {
public static void main(String[] args) {
PrototypeManage manage = new PrototypeManage();
Prototype prototype1 = new Mooncake("月餅");
manage.register("月餅",prototype1);
//通過原型創建新對象。
Prototype prototype2 = manage.create("月餅");
prototype2.user();
System.out.println(prototype1 == prototype2);//false
}
}
interface Prototype extends Cloneable {
public abstract void user();
public abstract Prototype createClone();
}
class Mooncake implements Prototype{
String str = null;
public Mooncake(String s) {
this.str = s;
}
public void user() {
System.out.println("這是一個複雜的"+str);
}
public Prototype createClone() {
Prototype prototy = null;
try {
prototy = (Prototype) clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return prototy;
}
}
class PrototypeManage {
Map<String, Prototype> map = new HashMap<String, Prototype>();
public void register(String name, Prototype prototype) {
map.put(name, prototype);
}
public Prototype create(String prototypeName) {
Prototype clone = map.get(prototypeName).createClone();
return clone;
}
}