白话-23种设计模式2-原型模式
【摘要】 一、白话 类似于生化危机的克隆人,火影鸣人的多重分身术,就是以某一个“本体”为模板,造出很多个相同新的“本体复制”。二、定义 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。 当直接创建对象的代价比较大时,则采用这种模式。三、原型模式 /** * 鸣人模板原型 * ==需要实现Cloneable,否则调用clone()会报错== */public class MingRe...
一、白话
类似于生化危机的克隆人,火影鸣人的多重分身术,就是以某一个“本体”为模板,造出很多个相同新的“本体复制”。
二、定义
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。 当直接创建对象的代价比较大时,则采用这种模式。
三、原型模式
/**
* 鸣人模板原型
* ==需要实现Cloneable,否则调用clone()会报错==
*/
public class MingRen implements Cloneable {
private String name;
private String age;
private String tricks;
public MingRen(String name, String age, String tricks) {
this.name = name;
this.age = age;
this.tricks = tricks;
}
public Object clone() {
try {
// 浅拷贝 属性指向对一对象
super.clone();
// 深拷贝 属性指向新对象
return new MingRen(new String(this.name), new String(this.age), new String(this.tricks));
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getTricks() {
return tricks;
}
public void setTricks(String tricks) {
this.tricks = tricks;
}
}
public class PrototypeApplication {
public static void main(String[] args) {
MingRen mingRen = new MingRen("鸣人", "18", "螺旋丸");
MingRen clone = (MingRen) mingRen.clone();
System.out.println(mingRen.getAge() == clone.getAge());
}
}
四、总结
优点:创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程。
缺点:clone方法,需要修改源代码,违背开闭原则。同时克隆时,分为浅拷贝和深拷贝,深拷贝需要编写较为复杂的代码。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)