创建型模式-原型模式

原型模式(Prototype Pattern)是创建型设计模式的一种,它通过克隆(复制)已有的对象来创建新对象,而不是通过实例化。该模式的核心思想是:通过复制原型对象来生成新对象,避免了重新创建对象的开销。

在Java中,原型模式通常通过实现 Cloneable 接口 和重写 clone() 方法 来实现。以下是原型模式的关键点:

原型模式的优点

  • 性能提升:复制对象比重新初始化对象要快,尤其是创建成本高的对象。
  • 隐藏复杂逻辑:无需关心创建过程中的复杂逻辑,直接通过克隆获得实例。
  • 动态性:在运行时可以动态创建对象,适合需要大量类似对象的场景。

适用场景

  • 对象初始化昂贵,但可以通过现有实例复制。
  • 需要生成对象的种类繁多,而这些对象差异较小。
  • 避免构造函数污染,减少复杂的参数配置。

组成

  • Prototype接口:定义一个clone方法。
  • 具体原型类(ConcretePrototype):实现克隆操作,并返回对象副本。
  • 客户端(Client):调用原型的clone方法,创建新对象。

代码

java 复制代码
// Prototype接口
public abstract class Prototype implements Cloneable {
    @Override
    public Prototype clone() {
        try {
            // 调用Object的clone方法,浅拷贝
            return (Prototype) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}

// 具体原型类
public class ConcretePrototype extends Prototype {
    private String field;

    public ConcretePrototype(String field) {
        this.field = field;
    }

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }

    @Override
    public String toString() {
        return "ConcretePrototype{" +
               "field='" + field + '\'' +
               '}';
    }
}

// 客户端
public class PrototypeClient {
    public static void main(String[] args) {
        // 创建一个原型对象
        ConcretePrototype prototype = new ConcretePrototype("原型值");

        // 克隆对象
        ConcretePrototype clonedPrototype = (ConcretePrototype) prototype.clone();

        // 修改克隆对象
        clonedPrototype.setField("克隆值");

        // 输出
        System.out.println("原型对象:" + prototype);
        System.out.println("克隆对象:" + clonedPrototype);
    }
}
相关推荐
sunny.day3 天前
js原型与原型链
开发语言·javascript·原型模式·js原型链
UXbot4 天前
AI网页开发工具能替代工具吗?5大平台对比
前端·人工智能·低代码·ui·原型模式·web app
weixin_307779134 天前
从“大海捞针”到“主动推理”:AI如何重塑云原生故障诊断的根因链
开发语言·人工智能·算法·自动化·原型模式
swordbob4 天前
prototype 注入到 singleton 里,prototype是否还是线程安全的
安全·spring·单例模式·原型模式
isNotNullX5 天前
企业数据中台建设,ETL工具选错了会踩哪些坑?
数据仓库·etl·原型模式
半个烧饼不加肉5 天前
JS 底层探究-- 普通函数和构造函数
开发语言·javascript·原型模式
折哥的程序人生 · 物流技术专研6 天前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则
ourenjiang8 天前
【学习设计模式】原型模式
学习·设计模式·原型模式
迷藏4949 天前
Python+DuckDB:轻量级BI流水线实战
java·开发语言·python·原型模式
J2虾虾14 天前
Spring AI Alibaba - 检索增强生成(RAG)
人工智能·spring·原型模式