首页 > 其他 > 详细

23种设计模式-原型模式

时间:2020-06-20 13:28:47      阅读:64      评论:0      收藏:0      [点我收藏+]

浅克隆

package factory.prototype.Demo01;

import java.util.Date;

//客户端  实现克隆
//
public class Bili {
    public static void main(String[] args) throws CloneNotSupportedException {
        //原型对象
        Date date = new Date();
        Video v1 = new Video("来呀", date);
        Video v2 = (Video) v1.clone();


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


    }
}

/*
  // v1可以克隆 v2

        Video v2 = (Video) v1.clone(); //克隆出来的对象和原来的一模一样
        System.out.println("v2=>"+v2);
        System.out.println("v2=>hash:"+v2.hashCode());

        v2.setName("clone:哈呀!");

        System.out.println(v2);
*/

  运行发现:v2完全克隆了v1的信息。但是v1 v2指向了同一个date   如果改变了date的值, v1发生了改变 v2也会发生改变

深克隆: v2将v1的属性一并进行克隆   改变v1的属性 v2不变

package factory.prototype.demo02;

import java.util.Date;

/*
    怎样实现克隆
    1、实现一个接口    Cloneable
    2、重写一个方法   clone()
*/

//Video: 视频原型
public class Video implements Cloneable {//无良,克隆他人作品
     private  String name;
     private Date createTime;

     //改变克隆的方法
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Object obj = super.clone();
        Video v = (Video) obj;

        //实现深克隆    除此以外还可以进行序列化 反序列化
        v.createTime = (Date) this.createTime.clone();//将这个对象的属性也进行克隆

        return obj;
    }

    public Video() {
    }

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

    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 +
                ‘}‘;
    }
}

  

创建型模式到此结束!

 

23种设计模式-原型模式

原文:https://www.cnblogs.com/yppaopao/p/13167989.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!