🔎这里是JAVA长虹键法,关注我学习JAVA不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️
🗡专栏介绍
【JAVA长虹键法】 主要讲了23种设计模式,本系列专栏会以虹猫蓝兔七侠传的故事为例来给大家详细分析所有模式,希望能给大家带来帮助!
🗡本期介绍
模式: 原型模式
案例: 克隆虹猫
文章目录

👀什么是原型模式
原型(Prototype)模式的定义如下: 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。
🗡优点
🗡缺点
🗡应用场景
👀浅克隆
案例:克隆虹猫
浅克隆一个虹猫,外表特征一样,但是只有一个灵魂。
克隆虹猫身体受到伤害,本体虹猫不受影响。
克隆虹猫精神受到伤害,本体虹猫也受到同样的伤害。
🗡代码实现
虹猫灵魂状态类
public class Hong {
//虹猫的灵魂状态
private String lh;
Hong(String lh) {
this.lh = lh;
}
Hong() {
}
public String getLh() {
return lh;
}
public void setLh(String lh) {
this.lh = lh;
}
}
虹猫个体类
public class Qian implements Cloneable {
private String shou;
private String jiao;
private String yan;
private Hong hong;
Qian() {
}
Qian(String shou, String jiao, String yan, Hong hong) {
this.hong = hong;
this.shou = shou;
this.jiao = jiao;
this.yan = yan;
}
public Qian clone() throws CloneNotSupportedException {
return (Qian) super.clone();
}
public String getShou() {
return shou;
}
public void setShou(String shou) {
this.shou = shou;
}
public String getJiao() {
return jiao;
}
public void setJiao(String jiao) {
this.jiao = jiao;
}
public String getYan() {
return yan;
}
public void setYan(String yan) {
this.yan = yan;
}
public Hong getHong() {
return hong;
}
public void setHong(Hong hong) {
this.hong = hong;
}
}
测试类
public class Demo {
public static void main(String[] args) throws CloneNotSupportedException {
Qian qian = new Qian("两只手", "两只脚", "两只眼", new Hong("完整的灵魂"));
Qian qian1 = qian.clone();
System.out.printf("虹猫少侠本体的身体状态:%s,%s,%s,%s,", qian.getHong().getLh(), qian.getJiao(), qian.getShou(), qian.getYan());
System.out.println();
System.out.printf("虹猫少侠一号的身体状态:%s,%s,%s,%s,", qian1.getHong().getLh(), qian1.getJiao(), qian1.getShou(), qian1.getYan());
}
}
克隆出来了一个虹猫一号,所有属性都一模一样
public class Demo {
public static void main(String[] args) throws CloneNotSupportedException {
Qian qian = new Qian("两只手", "两只脚", "两只眼", new Hong("完整的灵魂"));
Qian qian1 = qian.clone();
qian1.getHong().setLh("灵魂受到攻击");
qian1.setJiao("断了一只脚");
System.out.printf("虹猫少侠本体的身体状态:%s,%s,%s,%s,", qian.getHong().getLh(), qian.getJiao(), qian.getShou(), qian.getYan());
System.out.println();
System.out.printf("虹猫少侠一号的身体状态:%s,%s,%s,%s,", qian1.getHong().getLh(), qian1.getJiao(), qian1.getShou(), qian1.getYan());
}
}
这里克隆虹猫的脚和灵魂都受到了伤害,本体虹猫的身体没有受到影响,但是灵魂却受到了伤害。
🗡总结
👀深克隆
案例:克隆虹猫
深克隆一个虹猫,外表特征一样,都有独立灵魂。
克隆虹猫身体受到伤害,本体虹猫不受影响。
克隆虹猫精神受到伤害,本体虹猫也不受影响。
🗡代码实现
虹猫灵魂状态类
public class Hong implements Cloneable {
//虹猫的灵魂状态
private String lh;
Hong(String lh) {
this.lh = lh;
}
Hong() {
}
public Hong clone() throws CloneNotSupportedException {
return (Hong) super.clone();
}
public String getLh() {
return lh;
}
public void setLh(String lh) {
this.lh = lh;
}
}
虹猫个体类
public class Qian implements Cloneable {
private String shou;
private String jiao;
private String yan;
private Hong hong;
Qian() {
}
Qian(String shou, String jiao, String yan, Hong hong) {
this.hong = hong;
this.shou = shou;
this.jiao = jiao;
this.yan = yan;
}
public Qian clone() throws CloneNotSupportedException {
Qian qian = (Qian) super.clone();
hong = hong.clone();
return qian;
}
public String getShou() {
return shou;
}
public void setShou(String shou) {
this.shou = shou;
}
public String getJiao() {
return jiao;
}
public void setJiao(String jiao) {
this.jiao = jiao;
}
public String getYan() {
return yan;
}
public void setYan(String yan) {
this.yan = yan;
}
public Hong getHong() {
return hong;
}
public void setHong(Hong hong) {
this.hong = hong;
}
}
测试类
public class Demo {
public static void main(String[] args) throws CloneNotSupportedException {
Qian qian = new Qian("两只手", "两只脚", "两只眼", new Hong("完整的灵魂"));
Qian qian1 = qian.clone();
qian1.getHong().setLh("灵魂受到攻击");
qian1.setJiao("断了一只脚");
System.out.printf("虹猫少侠本体的身体状态:%s,%s,%s,%s,", qian.getHong().getLh(), qian.getJiao(), qian.getShou(), qian.getYan());
System.out.println();
System.out.printf("虹猫少侠一号的身体状态:%s,%s,%s,%s,", qian1.getHong().getLh(), qian1.getJiao(), qian1.getShou(), qian1.getYan());
}
}
🗡总结
👀下期预告
模式: 建造者模式
案例: 神医豆豆炼丹