Java--设计模式之原型模式
2013-12-16 15:34
323 查看
原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。通俗的说法就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
先看一个“钱复制”的例子
1、简历类public class Resume implements Cloneable{
private String name;
private String sex;
private String age;
private String timeArea;
private String company;
public Resume(String name){
this.name = name;
}
public void setPersonInfo(String sex,String age){
this.sex = sex;
this.age = age;
}
public void setWorkExperience(String timeArea,String company){
this.timeArea = timeArea;
this.company = company;
}
public void display(){
System.out.println(name+":"+sex+":"+age);
System.out.println("工作经历"+timeArea+":"+company);
}
@Override
protected Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}2、测试
3、更改后的简历类public class Resume implements Cloneable{
private String name;
private String sex;
private String age;
private WorkExperience work;
public Resume(String name){
this.name = name;
work = new WorkExperience();
}
public void setPersonInfo(String sex,String age){
this.sex = sex;
this.age = age;
}
public void setWorkExperience(String workData,String company){
work.setWorkData(workData);
work.setCompany(company);
}
public void display(){
System.out.println(name+":"+sex+":"+age);
System.out.println("工作经历"+work.getWorkData()+":"+work.getCompany());
}
@Override
protected Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}浅复制,被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。还有一种复制是深复制,深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。下面我们来看看如何实现简历的深复制。
4、更改后的工作经验类public class WorkExperience implements Cloneable{
private String workData;
private String company;
public String getWorkData() {
return workData;
}
public void setWorkData(String workData) {
this.workData = workData;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
@Override
protected Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}5、更改后的简历类
先看一个“钱复制”的例子
1、简历类public class Resume implements Cloneable{
private String name;
private String sex;
private String age;
private String timeArea;
private String company;
public Resume(String name){
this.name = name;
}
public void setPersonInfo(String sex,String age){
this.sex = sex;
this.age = age;
}
public void setWorkExperience(String timeArea,String company){
this.timeArea = timeArea;
this.company = company;
}
public void display(){
System.out.println(name+":"+sex+":"+age);
System.out.println("工作经历"+timeArea+":"+company);
}
@Override
protected Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}2、测试
public class Test { public static void main(String[] args) { Resume a = new Resume("大鸟"); a.setPersonInfo("man", "22"); a.setWorkExperience("2011-12-22", "XX公司"); Resume b = (Resume)a.clone(); b.setWorkExperience("2012-11-22", "YY公司"); Resume c = (Resume)a.clone(); c.setPersonInfo("man", "24"); a.display(); b.display(); c.display(); } }上面的例子是“浅复制”,让我们把工作经验用一个单独的类来表示,看看结果如何,更改简历类
3、更改后的简历类public class Resume implements Cloneable{
private String name;
private String sex;
private String age;
private WorkExperience work;
public Resume(String name){
this.name = name;
work = new WorkExperience();
}
public void setPersonInfo(String sex,String age){
this.sex = sex;
this.age = age;
}
public void setWorkExperience(String workData,String company){
work.setWorkData(workData);
work.setCompany(company);
}
public void display(){
System.out.println(name+":"+sex+":"+age);
System.out.println("工作经历"+work.getWorkData()+":"+work.getCompany());
}
@Override
protected Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}浅复制,被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。还有一种复制是深复制,深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。下面我们来看看如何实现简历的深复制。
4、更改后的工作经验类public class WorkExperience implements Cloneable{
private String workData;
private String company;
public String getWorkData() {
return workData;
}
public void setWorkData(String workData) {
this.workData = workData;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
@Override
protected Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}5、更改后的简历类
public class Resume implements Cloneable{ private String name; private String sex; private String age; private WorkExperience work; public Resume(String name){ this.name = name; work = new WorkExperience(); } private Resume(WorkExperience work){ this.work = (WorkExperience)work.clone(); } public void setPersonInfo(String sex,String age){ this.sex = sex; this.age = age; } public void setWorkExperience(String workData,String company){ work.setWorkData(workData); work.setCompany(company); } public void display(){ System.out.println(name+":"+sex+":"+age); System.out.println("工作经历"+work.getWorkData()+":"+work.getCompany()); } @Override protected Object clone(){ Resume obj = new Resume(this.work); obj.name = this.name; obj.age = this.age; obj.sex = this.sex; return obj; } }
相关文章推荐
- Java设计模式-原型模式
- java设计模式学习笔记--原型模式(浅克隆和深克隆)
- Java[Android]设计模式创建型设计模式之Builder模式+单例模式+原型模式
- java设计模式——原型模式(Prototype)
- Java设计模式四: 原型模式(Prototype Pattern)
- 设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) - Java实现
- java设计模式--原型模式(Prototype)
- java设计模式,原型模式
- Java设计模式--原型模式Prototype
- Java设计模式----------原型模式
- java设计模式(二)—— 装饰、门面、享元、原型、状态、策略
- JAVA设计模式之原型模式
- java设计模式——原型模式
- java设计模式之原型模式
- Java设计模式---原型模式(Prototype)
- 我的Java设计模式-原型模式
- java23种设计模式-----原型模式
- Java设计模式 —— 原型模式(Proto Type)
- JAVA设计模式之原型模式
- Java 23种设计模式之原型模式