Prototype
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
① 从工厂模式中的例子过来,将工厂基类创建对象的抽象类移到系统抽象类,用Java克隆代替
/**
* 抽象类
*/
public abstract class ComputerSystem implements Cloneable {
abstract void run();
public Object clone(){
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}
② 创建两个系统子类(Windows和Linux),实现父类的基本方法(系统都有的方法)
// Linux系统
public class Linux extends ComputerSystem {
@Override
void run() {
System.out.println("Linux");
}
}
// Windows系统
public class Windows extends ComputerSystem {
@Override
void run() {
System.out.println("Windows");
}
}
③ 使用原型模式
public class Main {
private ComputerSystem prototype; // 原型对象
// 1 根据传入的对象,prototype
public Main(ComputerSystem prototype){
this.prototype = prototype;
}
/**
* prototype原型对象这是供克隆创建新对象,而不是来使用的
*/
public void run(){
System.out.println(prototype);
// 2 克隆自己
ComputerSystem system = (ComputerSystem) prototype.clone();
system.run();
}
}
④ 测试
public class Test {
public static void main(String[] args) {
Linux linux1 = new Linux();
System.out.println(linux1);
Main main = new Main(linux1);
main.run();
}
}
场景:如果需要考虑对象很复杂的中间状态,而且又希望保存那个状态,用Prototype(深克隆)。如果几步骤就能创建,FactoryMethod。