惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
Hugging Face - Blog
Hugging Face - Blog
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
L
LangChain Blog
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
MyScale Blog
MyScale Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
Martin Fowler
Martin Fowler
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
V
V2EX

牛牛技术客栈

设计模式-备忘录模式 - OXOXTECH 牛牛技术客栈 设计模式-中介者模式 - OXOXTECH 牛牛技术客栈 Linux【Ubuntu】修改ssh默认端口 - OXOXTECH 牛牛技术客栈 设计模式-迭代器模式 - OXOXTECH 牛牛技术客栈 scheduled定时任务的三种基本实现方式 - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(三) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(二) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(一) - OXOXTECH 牛牛技术客栈 基于JavaFX的桌面端网络调试工具 - OXOXTECH 牛牛技术客栈 Golang Channel的原理介绍 - OXOXTECH 牛牛技术客栈 Go语言Map的原理分析 - OXOXTECH 牛牛技术客栈 Go语言错误处理(panic)的最佳实践 - OXOXTECH 牛牛技术客栈 设计模式-解释器模式 - OXOXTECH 牛牛技术客栈 Redis报错Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. go-webpbin库在Linux报错failed to encode image to WebP: exit status 1.......的问题 exe4j 打包加密的jar - OXOXTECH 牛牛技术客栈 Go生成图形验证码示例 - OXOXTECH 牛牛技术客栈 澳门一天游:一日尽享东方与西方的交融之美 - OXOXTECH 牛牛技术客栈 设计模式-命令模式 - OXOXTECH 牛牛技术客栈 别再自己瞎写工具类了,SpringBoot内置工具类应有尽有 - OXOXTECH 牛牛技术客栈 中山一日游 - OXOXTECH 牛牛技术客栈 设计模式-责任链模式 - OXOXTECH 牛牛技术客栈 起舞吧,齐舞吧 - OXOXTECH 牛牛技术客栈 设计模式-组合模式 - OXOXTECH 牛牛技术客栈 Go语言Web开发|GoFrame框架入门笔记 - OXOXTECH 牛牛技术客栈 Java打包exe教程 - OXOXTECH 牛牛技术客栈 设计模式-代理模式 - OXOXTECH 牛牛技术客栈 MySQL存储过程的优缺点有哪些? - OXOXTECH 牛牛技术客栈 前端渲染优化有哪些? - OXOXTECH 牛牛技术客栈 HTTP状态码及其含义 - OXOXTECH 牛牛技术客栈
设计模式-原型模式 - OXOXTECH 牛牛技术客栈
Jensen · 2024-01-24 · via 牛牛技术客栈

设计模式-原型模式

Jensen Java Java, 设计模式

前言

Java开发中,设计模式是常用的一种编码方式,合理使用设计模式可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本期将撰写一个关于设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源至:Gitee点击跳转。在上一篇《Java设计模式(3)建造者模式》文章中,我们介绍了建造者模式。本文是这个系列的第四篇章,我们将讲解一下原型模式的实现方式、应用场景以及它的用途。

原型模式

原型模式是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而不是通过实例化类来创建。这种方式允许我们在运行时动态地创建对象,并且可以避免直接使用new关键字创建对象。

应用场景

  1. 对象的创建成本较大: 当一个对象的创建过程较为复杂,包含了很多初始化步骤或者涉及到其他资源的获取,使用原型模式可以避免重复进行这些初始化操作,提高对象创建的效率。
  2. 对象的初始化状态相对稳定: 如果一个对象的状态变化不大,可以通过复制一个现有对象来创建新对象,而无需重新初始化。
  3. 需要避免直接使用new关键字创建对象: 原型模式允许在运行时动态地创建对象,而无需依赖具体的类,适用于需要减少直接使用new关键字的情况。
  4. 类的实例化过程比克隆更为方便: 如果一个类的实例化过程比克隆更为方便,且类的初始化操作相对较轻,可以考虑使用原型模式。
  5. 需要避免构造函数的约束: 如果类的构造函数有一些约束条件,而克隆是一种更灵活的创建方式,可以选择使用原型模式。

代码实现

创建一个原型接口

public interface Prototype {
    public Prototype clone();
}

再创建一个具体实现

public class ConcretePrototype implements Prototype{
    @Override
    public Prototype clone() {
        return new ConcretePrototype();
    }
}

测试使用,利用克隆创建不同的对象

System.out.println("------------------------------原型模式-----------------------------");
ConcretePrototype concretePrototype = new ConcretePrototype();
System.out.println(concretePrototype);
Prototype clone = concretePrototype.clone();
System.out.println(clone);

输出

image.png

结尾

Java中的Object类实现了Cloneable接口,这就意味着Java中的任何对象都可以实现原型模式。通过实现Cloneable接口,并重写Object类中的clone()方法,可以实现原型模式。例如 ArrayListHashMap 等集合类都实现了Cloneable 接口,可以通过复制现有对象来创建新的对象。