文档章节

原型模式prototype

SunnyWu
 SunnyWu
发布于 2018/09/13 14:14
字数 646
阅读 5
收藏 0

原型模式prototype很重要,在我们的工程中和开源软件中都有大量的使用。

它主要解决了对象重复创建的过程,也就是对象复杂的过程。如果一个对象new的时候需要很久,如果new10000个会非常耗时,如果用clone基本上和new一个对象的时间消耗是一样的。当然clone的时候需要考虑浅拷贝和深拷贝的问题。

– Cloneable接口和clone方法

– Prototype模式中实现起来最困难的地方就是内存复制操作,所幸在Java中提供了clone()方法替我们做了绝大部分事。

对于深拷贝的问题,我们展开一下,利用序列化和反序列化技术很容易实现深克隆!

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Date date = new Date(12312321331L);

Sheep s1 = new Sheep("少利",date);

System.out.println(s1);

System.out.println(s1.getSname());

System.out.println(s1.getBirthday());

 

 

//使用序列化和反序列化实现深复制

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(bos);

oos.writeObject(s1);

byte[] bytes = bos.toByteArray();

ByteArrayInputStream bis = new ByteArrayInputStream(bytes);

ObjectInputStream ois = new ObjectInputStream(bis);

Sheep s2 = (Sheep) ois.readObject(); //克隆好的对象!

 

 

System.out.println("修改原型对象的属性值");

date.setTime(23432432423L);

System.out.println(s1.getBirthday());

s2.setSname("多利");

System.out.println(s2);

System.out.println(s2.getSname());

System.out.println(s2.getBirthday());

原型模式一般很少单独出现,一般都是和工厂模式一起出现,通过clone的方法创建一个对象,然后又工厂方法提供给调用者。

spring中的bean的创建就有两种方式,单例模式和原型模式(当然原型模式需要和工厂模式搭配使用)

到这里我们就把创建型的4种设计模式都讲完了。这里做一个总结:

  • 单例模式  保证一个类只有一个对象,并且提供一个访问该对象的全局访问点
  • 工厂模式  将生产者和产品解耦,调用者只需要问生产者要即可获得产品。
  • 建造者模式 将builder构建和装配director分来,组合使用。
  • 原型模式   直接new对象非常繁琐的数据准备和访问权限的时候可以使用原型模式来clone。

© 著作权归作者所有

上一篇: 建造者模式
下一篇: 工厂模式
SunnyWu
粉丝 12
博文 59
码字总数 11164
作品 0
苏州
架构师
私信 提问
23种设计模式(5):原型模式

定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具...

LCZ777
2014/07/05
0
0
设计模式7——Prototype设计模式

Prototype原型设计模式是指用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。Prototype原型模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何关于对象创建的...

小米米儿小
2013/12/11
0
0
Prototype(原型)设计模式之析

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何...

欧阳俊文
2013/11/19
0
0
javascript 原型

什么是原型(prototype) 原型是javascript用来创建对象的一种设计模式。比较Java和javascript创建对象的区别。Java中创建对象的过程,先指定一个类型,然后通过类创建对象。类是对象的蓝图。...

sl_yang
2016/06/15
11
0
设计模式-原型模式

原型模式 原型模式的优点 使用场景 代码实现: 原型模式的注意点 使用原型模式不会调用类的构造方法. 深拷贝和浅拷贝 浅拷贝: 对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用...

wjk_snail
2016/03/17
2
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员Java教程解读什么是swing

  好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用。运行swing程序要求用户电脑上有java环境,这一点不太现实也不方便。现在的java主要以web方向为主,...

好程序员IT
9分钟前
0
0
HDFS查看文件内容

随机返回指定行数的样本数据 Hadoop fs -cat /path/txt | shuf -n 5 返回前几行的样本数据 hadoop fs -cat /path/txt | head -100 返回最后几行的样本数据 hadoop fs -cat /path/txt | tail ...

休辞醉倒
23分钟前
0
0
图像处理控件Aspose.Imaging v19.6新版亮点示例详解(3)

Aspose.Imaging for .NET一种高级图像处理控件,允许开发人员创建,编辑,绘制或转换图像。图像导出和转换是API核心功能之一,它允许在不安装Photoshop应用程序或任何其他图像编辑器的情况下...

mnrssj
24分钟前
0
0
Sleuth

https://blog.csdn.net/forezp/article/details/81041078 在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin, 你只需要在pom文件中引入相应的依赖即可 在spring Cloud为F版本的时候,...

Java搬砖工程师
32分钟前
0
0
计算机视觉方面的所有数据集

链接:https://github.com/wangqingbaidu/Dr.Sure

云烟成雨forever
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部