1. 为什么要引入原型模式?
在某些场景中,需要大量使用同一个对象object。而每次利用new 的方式来得到实例化对象object,代价会很高。特别是在企业级开发中,有的对象实例化的成本很高:例如需要通过网络或IO操作。而利用原型模式(其本质clone)的方式,简化实例化对象的成本。因为clone的方式创建对象,只需要内存操作即可。
2. 原型模式如何实现?
public class PrototypeDemo {
public static void main(String[] args) throws CloneNotSupportedException {
// 使用原型模式前:3次new操作
Resume a = new Resume();
a.setPersonInfo("Lucy", 24);
a.setWorkExperience("2005-2009", "xx");
a.display();
Resume b = new Resume();
b.setPersonInfo("Lucy2", 24);
b.setWorkExperience("2005-2009", "xx");
b.display();
Resume c = new Resume();
c.setPersonInfo("Lucy3", 24);
c.setWorkExperience("2005-2009", "xx");
c.display();
//使用原型模式后:1次new操作,两次clone
Resume cb = (Resume)a.clone();
cb.setAge(25);
cb.setName("clone Lucy");
cb.display();
Resume cc = (Resume)a.clone();
cc.setAge(26);
cc.setName("clone Lucy");
cc.display();
}
}
Resume.java
package design.patterns;
//实现Cloneable接口,该接口为标志性接口(无方法)
public class Resume implements Cloneable{
private String name;
private int age;
private String workTime;
private String workAddress;
// 将Object protected的clone方法访问权限提升为public
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
// 设置个人信息
public void setPersonInfo(String name, int age){
this.name = name;
this.age = age;
}
// 设置工作经历
public void setWorkExperience(String workTime,String workAddress){
this.workTime = workTime;
this.workAddress = workAddress;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getWorkPeroid() {
return workTime;
}
public void setWorkPeroid(String workPeroid) {
this.workTime = workPeroid;
}
public String getCompany() {
return workAddress;
}
public void setCompany(String company) {
this.workAddress = company;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void display(){
System.out.println("name: " + name);
System.out.println("age: " + age);
System.out.println("workPeroid: " + workTime);
System.out.println("company: " + workAddress);
}
}
总结:原型模式的核心即clone。注意有深clone和浅clone之分,这里不深入。
本文深入探讨了原型模式在企业级开发中的优势,通过对比使用new操作和原型模式创建对象的成本,展示了原型模式如何简化实例化过程。以Resume类为例,详细阐述了如何实现Cloneable接口并利用clone方法来复制对象,有效减少了对象实例化的时间和资源消耗。
245

被折叠的 条评论
为什么被折叠?



