创建型模式-原型模式

原型模式(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);
    }
}
相关推荐
询问QQ:180809517 天前
永磁同步电机参数辨识那些事儿
原型模式
小白勇闯网安圈8 天前
wife_wife、题目名称-文件包含、FlatScience
javascript·python·网络安全·web·原型模式
还是大剑师兰特8 天前
ES6 class相关内容详解
es6·原型模式·大剑师
ZouZou老师8 天前
C++设计模式之原型模式:以家具生产为例
c++·设计模式·原型模式
San30.9 天前
从原型链到“圣杯模式”:JavaScript 继承方案的演进与终极解法
开发语言·javascript·原型模式
AAA阿giao10 天前
深入理解 JavaScript 中的面向对象编程(OOP):从构造函数到原型继承
开发语言·前端·javascript·原型·继承·原型模式·原型链
勇气要爆发13 天前
物种起源—JavaScript原型链详解
开发语言·javascript·原型模式
AAA阿giao13 天前
JavaScript 原型与原型链:从零到精通的深度解析
前端·javascript·原型·原型模式·prototype·原型链
chilavert31813 天前
技术演进中的开发沉思-225 Prototype.js 框架
开发语言·javascript·原型模式
雨中飘荡的记忆13 天前
设计模式之原型模式详解
设计模式·原型模式