当前位置: 首页 > news >正文

创建型模式 - 原型模式 (Prototype Pattern)

创建型模式 -原型模式 (Prototype Pattern)

它允许通过复制现有对象来创建新对象,而无需知道对象的具体创建细节。在 Java 中,可以通过实现 Cloneable 接口和重写 clone() 方法来实现原型模式。


  • 有深、浅两种克隆
    • 类实现 Cloneable 接口就可以深克隆
    • 如果类中又包含了引用类型对象,这部分将不能被深克隆,会变成浅克隆
      • 什么意思呢? 举例一个 Box 类, 类里面引用了 SubBox 类, 当 Box 被克隆的时候, SubBox 引用的是同一个对象
      	public class Box implements Cloneable {
      		private String name;
      		private String color;
      		private Double width;
      		// 引用类型, 指的是这部分只会被浅克隆
      		private SubBox subBox; 
      		// 那么怎么解决这种包含引用对象也深克隆呢? 
      		// 可以采用序列化写入成文件, 再反序列化转回来成对象,也能达到连引用类型也深克隆的效果
      		// 就像前端 JavaScript 对象,你应该没少写把对象转成 JSON 字符串再转回来,来达成深克隆
      	}
      	```
      
      

// 定义可克隆的形状类
class Shape implements Cloneable {
    private String type;

    public Shape(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    // 重写 clone 方法
    @Override
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}


// 客户端代码
public class PrototypePatternExample {
    public static void main(String[] args) {
        // 创建原始形状对象
        Shape originalShape = new Shape("Circle");
        // 克隆形状对象
        Shape clonedShape = (Shape) originalShape.clone();

        System.out.println("Original Shape Type: " + originalShape.getType());
        System.out.println("Cloned Shape Type: " + clonedShape.getType());
    }
}

相关文章:

  • 【Leetcode】两数之和
  • 【Blender】三、材质篇--01,Blender材质基础 原理化BSDF
  • Go红队开发—基础语法入门
  • 如何在 Ubuntu 上安装和使用 Podman ?
  • 【STL】4.<list>
  • kotlin 知识点 七 泛型的高级特性
  • Java 入门第一课 InteliJ IDEA 的快捷操作
  • 阿里云可观测全面拥抱 OpenTelemetry 社区
  • 【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】
  • JVM相关面试题
  • 项目实战--网页五子棋(游戏房间)(6)
  • Pytorch实现之混合成员GAN训练自己的数据集
  • MySQL 使用 `WHERE` 子句时 `COUNT(*)`、`COUNT(1)` 和 `COUNT(column)` 的区别解析
  • 第2课 树莓派镜像的烧录
  • SV基础(二):数据类型
  • C++ day6
  • 本地部署DeepSeek的硬件配置建议
  • 单目摄像头物体深度计算基础原理
  • SSL 证书是 SSL 协议实现安全通信的必要组成部分
  • js 判断数据是否为blob类型,blob数据转JSON和对象
  • 一周观展|一批重量级考古博物馆开馆:从凌家滩看到孙吴大墓
  • 下辖各区密集“联手”,南京在下一盘什么样的棋?
  • 爬坡难下坡险,居民出行难题如何解?
  • 刘国中将出席第78届世界卫生大会并顺访瑞士、访问白俄罗斯
  • 《日出》华丽的悲凉,何赛飞和赵文瑄演绎出来了
  • 工商银行杭州金融研修院原院长蒋伟被“双开”