23种设计模式之原型模式

目录

什么是原型模式

为什么使用原型模式

原型模式的基本结构

原型模式的实现步骤

实现代码(含注释)

使用场景


什么是原型模式

原型模式是一种创建型设计模式,该模式的核心思想是基于现有的对象创建新的对象,而不是从头开始创建。在原型模式中,通常有一个原型对象,它被用作创建新对象的末班。新对象通过复制原型对象的属性和状态来创建,而无需知道具体的创建细节。

为什么使用原型模式

每次创建对象时都会消耗资源,而通过原型模式就可以复制现有的对象来迅速克隆一个新的对象,可以降低对象创建的成本。

原型模式的基本结构

实现原型模式需要结合原型对象声明一个克隆方法clone(),执行该方法会创建一个当前类的新对象,并将原始对象中的成员变量复制到新生成的对象中,而不必实例化。并且在这个过程中只需要调用原型对象的克隆方法,而无需知道 原型对象的具体类型。

原型对象主要包括两个重点模块:

  • Prototype抽象原型接口:声明一个克隆的方法clone
  • ConcretePrototype具体原型类:实现clone方法,复制当前对象并返回一个新对象

原型模式的实现步骤

  1. 创建一个抽象类或者接口,声明一个克隆方法clone
  2. 实现具体原型类,重写克隆方法
  3. 客户端中实例化具体原型类的对象,并调用克隆方法来创建新的对象

实现代码(含注释)

java 复制代码
//原型模式
//1.定义抽象原型类
abstract class Prototype implements Cloneable{
    @Override
    public abstract Prototype clone();
}
//2.实现具体原型类
class ConcretePrototype extends Prototype{
    private String data;
    public ConcretePrototype(String data){
        this.data=data;
    }
    @Override
    public Prototype clone() {
        return new ConcretePrototype(this.data);
    }
    public String getData(){
        return data;
    }
}
//3.客户端代码
public class Client {
    public static void main(String[] args) {
//       实例化具体原型对象
        Prototype original=new ConcretePrototype("Original Data");
//        克隆原型对象
        Prototype clone=original.clone();
//        输出克隆的数据
        System.out.println("Clone Data:"+((ConcretePrototype)clone).getData());
    }
}

使用场景

相比于直接实例化对象,通过原型模式复制对象可以减少资源消耗,提⾼性能,尤其在对象的创建过程复杂或对象的创建代价较大的情况下。当需要频繁创建相似对象、并且可以通过克隆避免重复初始化⼯作的场景时可以考虑使用原型模式,在克隆对象的时候还可以动态地添加或删除原型对象的属性,创造出相似但不完全相同的对象,提高了灵活性。

相关推荐
码哥字节11 分钟前
11 万 Star 的 Spec Kit,90% 的工程师只用它解决了 10% 的问题
设计模式·vibe coding·github spec kit
程序员吕洞宾12 分钟前
开源多维表格SmartTable V1.6.1:工作流画布,让自动化工作流配置更直观、更方便
java·开源·自动化
我登哥MVP17 分钟前
走进 Gang of Four 设计模式:访问者模式
java·设计模式·访问者模式·原型模式
雪碧聊技术20 分钟前
一文深入理解 Java 函数式编程思想
java·函数式编程
AIGS00123 分钟前
突破语义鸿沟:从向量空间JBoltAI看企业大脑构建逻辑
java·大数据·人工智能·人工智能ai大模型应用
琢磨先生David29 分钟前
OpenJDK 与 Oracle JDK 完整区别
java
倔强的石头10633 分钟前
企业智能设备运维管理系统:靠飞算 JavaAI,告别 Java 低效搬砖日常
java
深盾科技_Virbox44 分钟前
软件授权工具静默安装实践
java·运维·数据库·安全·软件需求
qq_452396231 小时前
第二篇:《Jenkins 从零搭建:安装、配置与第一个 Pipeline》
java·运维·jenkins
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第172题】【07_Redis篇】第8题:`setnx` 做分布式锁存在的问题
java·redis·分布式锁·死锁·setnx