Java设计模式 _创建型模式_原型模式(Cloneable)

一、原型模式

1、原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能比较好。一般对付出较大代价获取到的实体对象进行克隆操作,可以提升性能。

2、实现思路:

(1)、需要克隆的实体类实现Cloneable接口

(2)、复写clone方法(当前对象本身可以不复写,如果当前对象被继承,需要clone子类,则必须要复写)

二、代码示例

1、基础示例:

java 复制代码
import lombok.Data;
@Data
public class Rose implements Cloneable {
    private String name;

    public static void main(String[] args) throws CloneNotSupportedException {
        Rose rose = new Rose();
        rose.setName("玫瑰");
        System.out.println(rose);

        Rose clone = (Rose)rose.clone();
        System.out.println(clone);
		
		System.out.println(rose==clone);
    }
}

上运行结果:

可以看出,完整的复制了属性,且并不是同一个对象。实现了Cloneable接口的类可以直接用clone方法。

2、继承示例:

java 复制代码
// 花抽象类
import lombok.Data;
@Data
public  abstract class Flower implements Cloneable{
    protected String name;
    public abstract String desc();

    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}
// 牡丹花类
public class Peony extends Flower {
    public Peony(){
        this.name = "peony";
    }
    @Override
    public String desc() {
        return "牡丹花";
    }
}

// 梅花类
public class Plum extends Flower {
    public Plum(){
       this.name = "plum";
    }
    @Override
    public String desc() {
        return "梅花";
    }
}
// 测试类
public class Ztest {
    public static void main(String[] args) {
        Flower plum = new Plum();
        System.out.println(plum);

        Flower clone = (Flower) plum.clone();
        System.out.println(clone);
        System.out.println(plum==clone);
    }
}

运行结果:

可以看到运行结果,可以看到完成克隆,且并非同一个对象。子类在调用clone方法时,抽象父类中必须重写,否则无法调用。

学海无涯苦作舟!!!

相关推荐
是2的10次方啊1 小时前
设计模式与生活②:你只管点外卖,别管堡怎么做
设计模式
是2的10次方啊19 小时前
设计模式与生活①:你的脸,为什么不能有第二个?
设计模式
高晶21 小时前
ARM 嵌入式 Linux 命令系统 BusyBox 实战指南
linux·设计模式·程序员
高晶21 小时前
语音合成与变声技术十大业务场景落地实战:从电商直播到规模化生产
设计模式·程序员
博风1 天前
19、设计模式应用举例:桥接模式:制作电视节目
设计模式·桥接模式
知守观1 天前
从 4 套 PDF 库的混战,聊聊老项目的依赖管理与“静默失败”
java·后端·设计模式
geovindu2 天前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式
SENKS_DIGITAL2 天前
金属加工遇上数字化:通快展厅里的工业蜕变-森克思科技
科技·设计模式·展厅设计·展馆设计·科技展厅设计·展览设计·企业展厅设计
flower9803232 天前
C++消息总线软件开发框架AI重构版
c++·设计模式·架构
zzu123zsw3 天前
业务拆分后的治理深水区:解构企业级微服务六大核心设计模式与高可用落真实践
微服务·设计模式·架构·高可用·微服务架构设计