notebook notebook
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)

学习笔记

啦啦啦,向太阳~
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)
  • 设计模式

    • Java 设计模式详解

      • 引言
      • UML图与软件设计原则
      • 单例模式
      • 工厂模式
      • 原型模式
        • 1. 概述
        • 2. 结构
        • 3. 实现
        • 4. 使用场景
      • 建造者模式
      • 代理模式
  • 基础
  • 设计模式
  • Java 设计模式详解
yubin
2024-03-03
目录

原型模式

# 1. 概述

用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。

# 2. 结构

原型模式包含如下角色:

  • 抽象原型类:规定了具体原型对象必须实现的的 clone() 方法。
  • 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。
  • 访问类:使用具体原型类中的 clone() 方法来复制新的对象。

接口类图如下:

image-20240303194125488

在上面的类图中:

  • Prototype:抽象原型类,要求子类必须实现 clone 方法
  • Realizetype:实现了抽象原型类的具体原型类,其实现了 clone 方法
  • PrototypeTest:访问类,r1 是原型对象,我们使用 clone() 复制出来了一个新的对象

# 3. 实现

原型模式的 clone 分为 shallow clone(浅克隆)和 deep clone(深克隆)。

Java 的 Object 类所提供的 clone() 的默认实现是 shallow clone。

Java 的 Cloneable 接口就是上面类图中的抽象原型类,而实现了 Cloneable 接口的子类就是具体的原型类。

示例:

  • 具体的原型类:Realizetype
public class Realizetype implements Cloneable {

    public Realizetype() {
        System.out.println("具体的原型对象创建完成!");
    }

    @Override
    protected Realizetype clone() throws CloneNotSupportedException {
        System.out.println("具体原型复制成功!");
        return (Realizetype) super.clone();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
  • 测试访问类:
public class PrototypeTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        Realizetype r1 = new Realizetype();
        Realizetype r2 = r1.clone();

        System.out.println("对象r1和r2是同一个对象?" + (r1 == r2));
    }
}
1
2
3
4
5
6
7
8

# 4. 使用场景

如果对象的创建非常复杂,可以使用原型模式快捷地创建对象。

编辑 (opens new window)
上次更新: 2024/03/03, 13:24:59
工厂模式
建造者模式

← 工厂模式 建造者模式→

最近更新
01
Deep Reinforcement Learning
10-03
02
误删数据后怎么办
04-06
03
MySQL 一主多从
03-22
更多文章>
Theme by Vdoing | Copyright © 2021-2024 yubincloud | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×