原型模式

原型模式

继承Cloneable接口,重写clone()方法。

public class Sheep implements Cloneable {
    private String name;
    private int age;
    private String color;

    public Sheep(String name, int age, String color) {
        this.name = name;
        this.age = age;
        this.color = color;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "sheep{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", color='" + color + '\'' +
                '}';
    }

    @Override
    protected Object clone() {
        Sheep sheep=null;
        try {
            sheep = (Sheep) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return sheep;
    }
}

import yuanxingmoshi.Sheep;

public class Client {
    public static void main(String[] args) {
        Sheep sheep = new Sheep("小白", 13, "白色");
        System.out.println(sheep);
        System.out.println(sheep.hashCode());
        Sheep sheep1 = new Sheep(sheep.getName(),sheep.getAge(),sheep.getColor());
        System.out.println(sheep1);
        System.out.println(sheep1.hashCode());
    }
}
  1. 原型模式在Spring框架中源码分析:原型bean的创建,就是原型模式的应用
  2. 浅拷贝和深拷贝:对于浅拷贝就是使用默认的clone()方法来实现,它的特点为浅拷贝会对基本数据类型直接进行值传递,对引用类型进行引用传递。通俗来说,基本数据类型值传递而已,hashcode会变化。引用类型只是加了一个指针,没有加额外的空间。
  3. 深拷贝为整个对象进行拷贝,复制了对象的所有基本类型的成员变量值,为所有引用类型的成员变量申请了存储空间。
  4. 深拷贝实现方式有两种:一种重写clone方法来实现 一种通过对象序列化实现
@Override
    protected Object clone() throws CloneNotSupportedException {
        Object deep = null;
        /*完成对基本类型的克隆*/
        deep=super.clone();
        /*对引用类型的属性单独处理*/
        /*强转*/
        SheepType sheep = (SheepType) deep;
        /*对强转后的对象的属性进行clone*/
        sheep.sheep = (Sheep) sheep.clone();

        return sheep;
    }

个人觉的就是两层浅拷贝,先利用基础的拷贝,在单独进行一个拷贝。

ByteArrayOutputStream bos = null;
ObjectOutputStream oos = null;
ByteArrayInputStrean bis= null;
ObjectInputStream ois = null;
//序列化
bos = new ByteArrayOutputStream bos ;
oos = new ObjectOutputStream (bos);
oos.writeObject(this);//当前对象以对象流的方式输出
//反序列化
//释放资源
全部评论

相关推荐

oppo 应用软开 22*15+0.5*12
拿到了ssp完美:真的坎坷,但是你至少拿到这么多offer了!
点赞 评论 收藏
分享
寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
439972次浏览 4484人参与
# 春招别灰心,我们一人来一句鼓励 #
41383次浏览 524人参与
# 阿里云管培生offer #
119657次浏览 2219人参与
# 地方国企笔面经互助 #
7914次浏览 18人参与
# 虾皮求职进展汇总 #
113497次浏览 880人参与
# 实习,投递多份简历没人回复怎么办 #
2453683次浏览 34846人参与
# 北方华创开奖 #
107247次浏览 599人参与
# 实习必须要去大厂吗? #
55552次浏览 959人参与
# 同bg的你秋招战况如何? #
75178次浏览 548人参与
# 提前批简历挂麻了怎么办 #
149763次浏览 1976人参与
# 投递实习岗位前的准备 #
1195578次浏览 18546人参与
# 你投递的公司有几家约面了? #
33166次浏览 188人参与
# 双非本科求职如何逆袭 #
661770次浏览 7394人参与
# 机械人春招想让哪家公司来捞你? #
157585次浏览 2267人参与
# 如果公司给你放一天假,你会怎么度过? #
4714次浏览 53人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11214次浏览 253人参与
# 发工资后,你做的第一件事是什么 #
12359次浏览 61人参与
# 工作中,努力重要还是选择重要? #
35521次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20068次浏览 240人参与
# 实习想申请秋招offer,能不能argue薪资 #
39205次浏览 314人参与
# 我的上岸简历长这样 #
451863次浏览 8087人参与
# 非技术岗是怎么找实习的 #
155831次浏览 2120人参与
牛客网
牛客企业服务