创建型模式-原型模式

原型模式(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);
    }
}
相关推荐
青草地溪水旁3 天前
设计模式(C++)详解—原型模式(1)
c++·设计模式·原型模式
青草地溪水旁3 天前
设计模式(C++)详解—原型模式(2)
c++·设计模式·原型模式
青草地溪水旁3 天前
设计模式(C++)详解—原型模式(3)
c++·设计模式·原型模式
良木林4 天前
浅谈原型。
开发语言·javascript·原型模式
m0_603888714 天前
Prototype-Aware Multimodal Alignment for Open-Vocabulary Visual Grounding
ai·原型模式·论文速览
努力也学不会java9 天前
【设计模式】 原型模式
java·设计模式·原型模式
Meteors.11 天前
23种设计模式——原型模式 (Prototype Pattern)详解
设计模式·原型模式
女生也可以敲代码13 天前
JavaScript闭包、原型链、事件循环,一文彻底讲明白(小白也能懂)
开发语言·原型模式
给月亮点灯|13 天前
Vue基础知识-重要的内置关系:vc实例.__proto__.__proto__ === Vue.prototype
前端·vue.js·原型模式
心前阳光14 天前
Unity通过Object学习原型模式
学习·unity·原型模式