闲扯一下,我们都吃过月饼吧,那大家知道月饼是怎么制作出来的吗?(以前的工艺)
我小时候有经历过月饼的制作,提前买好面粉、糖、摸具、鸭蛋黄等,将面粉揉成团然后再用杆搓成面皮,将鸭蛋黄、糖配料什么的一股脑的卷成一团,用面皮包裹好,再使用模具整好形状,烤至金黄,出锅开吃。
Prototype模式(原型)
上面讲的使用模具整理好月饼,也可以看做一个原型模式,我们制作模具的过程,就已经完成了一个形状满意的月饼,后面制作月饼都和前一个类似。
原型模式定义:通过“复制”一个已经存在的实例来返回新的实例,而不是新键实例。被复制的实例就是我们称的“原型”。
- 复制一个实例相比new一个实例更加高效;
- 对于创建复制的对象或者说是几个类整合到一起的对象,更加方便;
示例代码
代码语言:javascript复制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;
}
}