设计模式三(原型模式)

简介: 经典的设计模式之一,广泛用于大多结构类似工程中

今天我们来聊一聊设计模式的创建型设计模式的第三种原型模式


这个设计模式用途也很广泛,原型模式其实就是像一个克隆蓝图,它就是按指定对象实例通过拷贝这些原型创建新的对象。这就跟克隆是差不多的原理!


原型模式的实施又分为浅克隆深克隆,浅克隆就是进行简单的值克隆,所谓值克隆就是值克隆基本的八大数据类型,引用类型不克隆仍然使用原对象的引用类型对象的地址;深克隆就是无论是简单的值还是引用数据类型全部都进行克隆一份!


光说不练毫无益处,下面我来一一实现


浅克隆

image.png

image.png

先创建一个bean对象,实现Cloneable接口中的clone方法


image.png

image.png


虽然说按照这个浅克隆的写法可以得到克隆后的对象,但是这仅仅是值克隆,可以看到上面的案例中,像名字、别名等都可以克隆一份,但是Person这个对象中的引用类型是指向同一个对象的,这就不是克隆了!所有浅克隆只是对简单的值克隆!



深克隆

对比浅克隆,深克隆更加的好用和实用!

image.png

Person对象还是浅克隆案例的Person对象,只是在类的头上多实现了一个Serialiazble接口,用于序列化操作,再加上private static final long serialVersionUID = 1L; 一个序列号也行

这里就分为两种写法,一种就是原生的浅克隆的加强版,另一种就是通过序列化和反序列化实现克隆的完整性


先看第一种浅克隆的加强版

image.png

image.png


可以看到两个对象的名字和各方面属性是相同,但是引用类型是不同的,但是所赋的值是相同的。


另一种是序列化方法,比较实用,特点是较为简单,易操作

image.png

很简单的操作,先将对象序列化读出去,在反序列化写进来

image.png

结果那也就理所当然的是相同的两份了!


总结:以上可以看到克隆的好处就是再不用新创建一个对象就可以实现两个对象之间的克隆更加易于操作,当对象很复杂的时候无异于节省更多的时间从而更加提高了工作效率。缺点也很明显,违背了ocp(开闭原则),因为每个被克隆的类都要被改动,有好处也有不足这也很正常!

相关文章
|
7月前
|
设计模式 安全 Java
面向对象编程的精髓:Java设计模式 - 原型模式(Prototype)完全参考手册
【4月更文挑战第7天】原型模式是OOP中的创建型设计模式,用于通过复制现有实例创建新实例,尤其适用于创建成本高或依赖其他对象的情况。它包括Prototype接口、ConcretePrototype实现和Client客户端角色。优点是性能优化、避免子类化和动态增加产品族。实现包括定义原型接口、实现具体原型和客户端调用克隆方法。最佳实践涉及确保克隆正确性、选择深拷贝或浅拷贝及考虑线程安全。但需注意克隆方法管理、性能开销和循环引用等问题。在Java中,实现Cloneable接口和覆盖clone方法可实现原型模式。
80 4
|
7月前
|
设计模式 Java 关系型数据库
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
|
7月前
|
设计模式 安全 Java
【设计模式】原型模式
【设计模式】原型模式
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑】设计模式——原型模式
对比原型模式和传统方式的实现思路、代码方案、优缺点,阐述原型模式的使用场景,以及深拷贝、浅拷贝等相关概念,并扩展原型模式在Spring源码中的应用。
【Java笔记+踩坑】设计模式——原型模式
|
3月前
|
设计模式 Java
Java设计模式-原型模式(3)
Java设计模式-原型模式(3)
Java设计模式-原型模式(3)
|
5月前
|
设计模式
iLogtail设计模式问题之iLogtail中的原型模式是什么
iLogtail设计模式问题之iLogtail中的原型模式是什么
iLogtail设计模式问题之iLogtail中的原型模式是什么
|
5月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
52 6
|
6月前
|
设计模式 Java
Java设计模式之原型模式详解
Java设计模式之原型模式详解
|
6月前
|
设计模式
原型模式-大话设计模式
原型模式-大话设计模式
|
6月前
|
设计模式 Java Spring
设计模式——原型模式
设计模式——原型模式