java设计模型-原型模型(浅克隆方法)

java原型模式-克隆方法

浅克隆
被复制对象的变量与原对象值相同,浅克隆仅仅复制拷贝的对象,但不复制他所引用的对象

深克隆
在浅克隆的基础上,那些引用其他对象的变量指向了复制过的新对象,深克隆把复制对象的引用对象也都复制了一遍

下例

  • 创建学生类,学生私有属性id,name,age
  • 创建老师类,老师私有属性name
  • 创建两者get、set方法
  • 老师类实现Cloneable接口,并重写clone()方法为公开方法
  • 创建Test类,并重写toString方法来返回对应值。

Teacher类

package Methods_YuanXing;

public class Teacher implements Cloneable{
    private String name;

    public Teacher(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Teacher(name:" + name + ")";
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

Student类

package Methods_YuanXing;

public class Student implements Cloneable{
    private String name;
    private int id;
    private int age;
    private Teacher teacher;

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public Student() {
    }

    public Student(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

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

    @Override
    public String toString() {
        return "Student(id:"+id+"+age:" + age + ",name:" + name + ")";
    }

        @Override
    protected Object clone() throws CloneNotSupportedException {
        Student s = (Student) super.clone();
        s.teacher = (Teacher) teacher.clone();
        return s;
    }
}

Test主类

package Methods_YuanXing;

import java.util.Arrays;

public class Test {


    private static Teacher t = new Teacher("老师");
    private static Student s = new Student("学生",1,1);

    public static void main(String[] args) {

        s.setTeacher(t);
        t.setName("老师2");
        System.out.println(s);
        System.out.println(t);


    }
}

测试结果

E:\java_jdk\bin\java.exe
Student(id:1+age:1,name:学生)
Teacher(name:老师2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值