原型模式

本文通过Java代码示例介绍了如何使用原型模式创建对象的浅拷贝。通过实现Cloneable接口并重写clone方法,可以轻松地复制对象状态。然而,需要注意的是,默认的拷贝行为是浅拷贝,这可能会影响到对象内的引用类型属性。
介绍

用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

使用
public class Prototype {
    public static void main(String[] args) throws CloneNotSupportedException {
        Student student = new Student();
        student.setAge(14);
        student.setName("Tom");

        Score score = new Score();
        score.setScore(123);

        student.setScore(score);

        Student clone = (Student) student.clone();
        //浅拷贝,这里返回true
        System.out.println(clone.getScore() == student.getScore());

        clone.setName("Cat");
        clone.setAge(35);
        clone.getScore().setScore(44);

        System.out.println(student);
        System.out.println(clone);
    }
}
class Score implements Cloneable{
    private Integer score;

    public Integer getScore() {
        return score;
    }

    public void setScore(Integer score) {
        this.score = score;
    }

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

    @Override
    public String toString() {
        return "Score{" +
                "score=" + score +
                '}';
    }
}
class Student implements Cloneable{
    private String name;
    private Integer age;
    private Score score;

    public Score getScore() {
        return score;
    }

    public void setScore(Score score) {
        this.score = score;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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


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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
}
复制代码
注意
  • 实现Cloneable接口,并重写clone方法即可进行拷贝操作
  • java默认的拷贝是浅拷贝。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值