原型模式

原型模式

继承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);//当前对象以对象流的方式输出
//反序列化
//释放资源
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
求个公司要我:接好运
点赞 评论 收藏
分享
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
442870次浏览 4513人参与
# 春招别灰心,我们一人来一句鼓励 #
42047次浏览 534人参与
# 阿里云管培生offer #
120330次浏览 2220人参与
# 地方国企笔面经互助 #
7969次浏览 18人参与
# 同bg的你秋招战况如何? #
76925次浏览 565人参与
# 实习必须要去大厂吗? #
55786次浏览 961人参与
# 北方华创开奖 #
107449次浏览 600人参与
# 虾皮求职进展汇总 #
115973次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11632次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454828次浏览 34858人参与
# 提前批简历挂麻了怎么办 #
149917次浏览 1978人参与
# 在找工作求抱抱 #
906050次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4760次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1195992次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157640次浏览 2267人参与
# 双非本科求职如何逆袭 #
662310次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12786次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35857次浏览 384人参与
# 简历中的项目经历要怎么写? #
86928次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20142次浏览 240人参与
# 我的上岸简历长这样 #
452040次浏览 8089人参与
牛客网
牛客企业服务