元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • 设计模式

    • 设计模式简介
    • 设计模式之单例模式
    • 设计模式之工厂模式
    • 设计模式之原型模式
      • 一、简介
      • 二、实现方式
        • 1、浅克隆
        • 2、深克隆
      • 三、应用场景
        • 1、常用的集合类,比如最ArrayList,实现了Cloneable接口,重写了clone()方法
        • 2、Spring中有一个类BeanUtils,它下面一个方法copyProperties(),使用反射的方式,将一个原型对象,copy成一个新的对象
      • 四、思维导图
    • 设计模式之建造者模式
    • 设计模式之适配器模式
    • 设计模式之桥接模式
    • 设计模式之组合模式
    • 设计模式之装饰器模式
    • 设计模式之外观模式
    • 设计模式之享元模式
    • 设计模式之代理模式
    • 设计模式之责任链模式
    • 设计模式之命令模式
    • 设计模式之解释器模式
    • 设计模式之迭代器模式
    • 设计模式之中介者模式
    • 设计模式之备忘录模式
    • 设计模式之观察者模式
    • 设计模式之状态模式
    • 设计模式之策略模式
    • 设计模式之模版模式
    • 设计模式之访问者模式
    • 设计模式辨析篇
  • 高可用

  • 系统设计
  • 设计模式
元月
2022-08-09
目录

设计模式之原型模式

# 设计模式之原型模式

# 一、简介

用于创建重复的对象,同时又能保证性能

当对象的创建非常复杂时,可以考虑使用原型模式快速创建对象

# 二、实现方式

# 1、浅克隆

需要实现Cloneable接口。克隆一个新对象,但是属性中引用的其他对象不会被克隆,仍然指向原有对象地址

public class MacBook implements Cloneable {
    private String name;
    @Override
    protected MacBook clone() throws CloneNotSupportedException {
        return (MacBook) super.clone();
    }
}
1
2
3
4
5
6
7

# 2、深克隆

需要实现Serializable接口。克隆一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

public class MacBook implements Cloneable, Serializable {
    private String name;
    @Override
    protected MacBook clone() {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(this);
            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bis);
            return (MacBook) ois.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 三、应用场景

# 1、常用的集合类,比如最ArrayList,实现了Cloneable接口,重写了clone()方法

# 2、Spring中有一个类BeanUtils,它下面一个方法copyProperties(),使用反射的方式,将一个原型对象,copy成一个新的对象

# 四、思维导图

#设计模式
设计模式之工厂模式
设计模式之建造者模式

← 设计模式之工厂模式 设计模式之建造者模式→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式