【原型模式】

原型模式就是相当于克隆复制:而原型模式里分为浅克隆深克隆,浅克隆把地址值也克隆了,他们都指向同一个地址值。这样的话原来的对象属性修改后被克隆的属性也会跟着修改这不是想要的效果。而深克隆的话就是把对象里的属性也调用克隆的方法,这样的话对象里面的属性修改后克隆出来的对象不会改变。

浅克隆:首先创建一个对象里面有两个属性,提供get、set方法,有参构造和无参构造和tostroing方法再实现一个接口 Cloneable   重写clone()方法

public class Video implements Cloneable{//克隆别人的视频
    private String name;
    private Date createTime;


    @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 +
                '}';
    }
}
public static void main(String[] args) throws CloneNotSupportedException {
    //原型对象  v1
    Date date = new Date();
    Video v1 = new Video("黄巨强学java", date);

    System.out.println("v1=>"+v1);
    System.out.println("v1=hashCode>"+v1.hashCode());

    //v1克隆v2出来
    Video v2 = (Video) v1.clone();
    System.out.println("v2=>"+v1);
    System.out.println("v2=hashCode>"+v1.hashCode());
    v2.setName("黄巨强学模式");
    System.out.println(v2);
   //浅克隆,地址值都是引用同一个
}

深克隆:在原有的clone()方法上把他的属性也调用克隆方法

@Override
protected Object clone() throws CloneNotSupportedException {
    Object obj = super.clone();
    Video v = (Video) obj;
    v.createTime  = (Date) this.createTime.clone();
    //实现深克隆
    return obj;
}
public static void main(String[] args) throws CloneNotSupportedException {
    //原型对象  v1
    Date date = new Date();
    Video v1 = new Video("黄巨强学java", date);
    //v1克隆v2出来
    Video v2 = (Video) v1.clone();

    System.out.println("v1=>"+v1);
    System.out.println("v1=>"+v2);
    System.out.println("*****************************");

    date.setTime(123456);

    System.out.println("v1=>"+v1);
    System.out.println("v1=>"+v2);



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值