原型模式

原型模式

序言

某学校开始只有10个学生,每个月会发放3张三好学生的奖状。由于发放的奖状比较少,所以多次重复“创建”奖状的消耗还可以忍受。但是随着学校规模越来越大,每个月可能要发300张三好学生奖状,如果此时再一张张的“创建”,那绝对是一个费时费力的事省力的事情。这样里的“复制”就是原型模式了。

定义

原型模式就是将一个已创建的实例对象用作原型,然后复制一个与原型对象一样的新实例对象。

类图

图片说明

示例代码

原型模式的本质就是“复制”一个对象。如果你熟悉Java语言的话,那一定了解“深拷贝”和“浅拷贝”,其实我们就可以通过任何一种拷贝方式进行对象的“复制”。

深拷贝和浅拷贝

我们知道在Java语言中的对象,是存在一块内存区域,然后通过引用去访问,其中引用的值就是对象所在的内存地址。下文代码中创建的学生对象就在某一块内存区域,例如内存地址为 0XFFF,变量 student 存在栈中,其值就是对象的内存地址,即0XFFF。如下图所示:

Student student = new Student();

原型模式1.jpeg
浅拷贝就是指拷贝对象的引用,拷贝前和拷贝后的变量,指向同一块内存区域,如下图:

Student student = new Student();
Student student2 = student;  // 浅拷贝,student和student2指向同一块内存区域

浅拷贝.jpeg
深拷贝就是会重新申请一块内存区域,对象的值和被拷贝对象完全一致,如下图:

Student student = new Student();
student.setName("xiaoming");

Student student2 = new Student();  // 深拷贝,student2重新申请内存
student2.setName(student.getName())

深拷贝.jpeg
通过介绍,其实原型模式是基于“拷贝”的形式,存在“深拷贝”和“浅拷贝”两种形式。

优缺点

优点

  • 性能好,可优化资源。在需要频繁创建相似对象的时候,使用原型模式可以节省大量资源和时间

    缺点

  • 在进行拷贝的时候,如果出现对象嵌套(即,对象的属性又是一个对象),这样拷贝深度会增大,拷贝难度也会随之增加。

全部评论

相关推荐

比亚迪深圳规划院 产品经理 0.9×1.36×12
点赞 评论 收藏
转发
头像
不愿透露姓名的神秘牛友
03-13 10:56
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务