设计模式之原型模式 Prototype

本文详细介绍了原型模式和建造者模式,包括它们的定义、适用场景以及如何实现浅克隆和深克隆。浅克隆仅复制对象的表面值,而深克隆则确保所有引用的对象都被复制。原型模式的优点在于性能提升和状态保存,但需要提供克隆方法,且深浅克隆需谨慎使用。建造者模式与工厂模式的区别在于构建过程更灵活,适合复杂对象的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标

  1.  掌握原型模式和建造者模式的应用场景
  2. 掌握原型模式的浅克隆和深克隆的写法
  3. 掌握建造者模式的基本写法
  4. 了解克隆是如何破坏单例的
  5. 了解原型模式的优、缺点
  6. 掌握建造者模式和工厂模式的区别


前言

        大家一起卷,当当小当家


下面开始学习

一、原型模式的定义

        原型模式(prototype pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

        调用者不需要指定任何创建细节,不调用构造函数。

        属于创建型模式

二、原型模式知识点

原型模式最关键的点为不通过new关键字创建对象,而是通过方法创建对象
通过方法创建的对象会保留原对象的属性以及值,也就是copy或者clone

原型模式的适用场景

  1. 类初始化消耗资源较多。
  2. new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
  3. 构造函数比较复杂。
  4. 循环体中生产大量对象时。

浅克隆与深克隆

浅克隆

  • 对应基本数据类型,以及String类型,直接拷贝的值
  • 对于引用数据类型,通过调用clone方法时,将引用类型属性的类的内存地址的值进行copy,并没有将里面具体的元素进行copy,所以调用的时候,修改了克隆对象的值后,会将原型对象的值进行了改变。
  • 浅克隆是怎么复制的呢?引用对象在复制的过程中,通过Java底层的字节流来完成复制的,但是JDK底层存在一种机制,当类存在的时候,就不会重新加载,只是将内存地址的值复制过来。而引用对象的值本身就是个内存地址,所以最终只是复制了内存地址,而不是内存地址内对象的值复制过来。

深克隆

  • 深克隆可以通过字节流(反序列化)或者json字符串的方式来将对象复制出来,json也是序列化的一种。
  • 先把对象转换为json字符串,再将json字符串转换成一个对象。
  • 深克隆带来的问题:与单例模式相悖,如果是单例就不要使用克隆,如果是克隆就不要用单例 。
  • JDK中实现了克隆的类ArrayList(循环赋值)、HashMap。

总结

原型模式的优点

  1. 性能优良,Java自带的原型模式是基于内存二进制流的拷贝,比直接new一个对象性能上提升了很多。
  2. 可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份并将其状态保存起来,简化了创建过程。

原型模式的缺点

  1.  必须配备克隆(或者可拷贝)方法。
  2. 当对已有类进行改造的时候,需要修改代码,违法了开闭原则。
  3. 深克隆、浅克隆需要运用得当。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值