设计模式之原型模式

五、原型模式

原型模式(Prototype Pattern): 使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。

原型模式就像复印技术,根据原对象复印出一个新对象,并根据需求对新对象进行微调

代码举例如下:

/**
 * @author liang.peng
 * @version 1.0
 * @description  用于实现克隆的类
 * @since 2022/7/18 15:29
 **/

public class Video implements Cloneable {
    //添加属性
    private String name;
    private Date createTime;

    //实现clone方法

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    public Video(String name, Date createTime) {
        this.name = name;
        this.createTime = createTime;
    }

    public Video() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "Video{" +
                "name='" + name + '\'' +
                ", createTime=" + createTime +
                '}';
    }
}

实现克隆:

/**
 * @author liang.peng
 * @version 1.0
 * @description 通过Video实现克隆
 * @since 2022/7/18 15:34
 **/

public class Clone {
    public static void main(String[] args) throws CloneNotSupportedException {
        //创建一个原型
        Date date = new Date();
        Video v1 = new Video("你好!!",  date);
        System.out.println(v1);
        System.out.println("v1hash:"+v1.hashCode());

        //进行克隆,如果需要创建和V1一样的对象,不需要从新去创建,只需要克隆就可以

        Video v2 = (Video) v1.clone();//强制转换一下类型。
        System.out.println(v2);
        System.out.println("v2hash:"+v2.hashCode());
    }

测试结果:

在这里插入图片描述
注意:以上克隆方法是有问题的

虽然克隆后结果都看起来差不多,但是v2和v1存在一个问题就是,v1之前使用了date对象,v2其实也指向了同一个date,这只是一种浅克隆,并不能将该对象指向的所有对象都从新拷贝一份。

深度克隆

这里我采用改造克隆方法的方式来实现深度克隆:

在这里插入图片描述

这样就可以实现深度的克隆了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值