原型模式(Prototype Pattern)基本介绍
原型模式属于创建型设计模式
原型表示一个样板对象,借助样板对象,可以克隆更多对象!
原型模式一般用于创建复杂的对象,因为在内存中创建复杂对象的花费时间很长,通过克隆内存中已经存在的对象,可以缩短创建对象时间,也就提高了程序的运行效率
public abstract class Car implements Cloneable {
abstract void go();
protected String carName;
@Override
protected Object clone() {
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return object;
}
public String getCarName(){
return carName;
}
}
public class Audi extends Car {
public Audi(String carName){
this.carName = carName;
}
@Override
void go() {
System.out.println("奥迪发车了");
}
}
public class BMW extends Car {
public BMW(String carName){
this.carName = carName;
}
@Override
void go() {
System.out.println("BMW发车啦");
}
}
public class CarCache {
private Map<String,Car> mCacheMap = new Hashtable();
public Car getOneCar(String carName){
if(carName == null || carName.isEmpty()) {
throw new IllegalArgumentException("大哥,起码传参数传对吧");
}
Car tempCar = mCacheMap.get(carName);
Car newCar = null;
if(tempCar != null) {
newCar = (Car)tempCar.clone();
}
return newCar;
}
public void loadCache(){
Car audi = new Audi("A4L");
Car bmw = new BMW("320Li");
mCacheMap.put(audi.getCarName(),audi);
mCacheMap.put(bmw.getCarName(),bmw);
}
}
public class Main {
public static void main(String args[]){
CarCache cache = new CarCache();
cache.loadCache();
cache.getOneCar("A4L").go();
}
}
总结
1、 复杂的对象提前创建好,由容器对象持有,当我们需要获取一个对象,只需要从容器对象中获取,而不是去新创建对象,原型模式,你懂了吗?