public class PrototypeDemo { public static void main(String[] args) throws InterruptedException, CloneNotSupportedException { long start = System.currentTimeMillis(); Student student = new Student("学生"); Student student1 = (Student) student.clone(); student1.setName("学生1"); Student student2 = (Student) student.clone(); student2.setName("学生2"); student2.getCourseList().add("美术"); Student student3 = (Student) student.clone(); student3.setName("学生3"); long end = System.currentTimeMillis(); System.out.println("创建对象共花费了时间:" + (end -start) + " ms"); System.out.println(student); System.out.println(student1); System.out.println(student2); System.out.println(student3); } } class Student implements Cloneable { private String name; // 假设courseList需要rpc调用获取 private List<String> courseList = new ArrayList<>(); public Student(String name) throws InterruptedException { this.name = name; courseList.add("语文"); courseList.add("数学"); courseList.add("英语"); Thread.sleep(100); } @Override public Object clone() throws CloneNotSupportedException { //浅拷贝 // return super.clone(); // 深拷贝 Student student =(Student) super.clone(); ArrayList<String> newCourseList = new ArrayList<>(student.getCourseList()); student.setCourseList(newCourseList); return student; } public List<String> getCourseList() { return courseList; } public void setCourseList(List<String> courseList) { this.courseList = courseList; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", courseList=" + courseList + '}'; } }
设计模式之原型模式
最新推荐文章于 2024-08-09 23:00:00 发布