创建型模式-原型模式

原型模式(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);
    }
}
相关推荐
MessiGo14 小时前
Javascript 编程基础(5)面向对象 | 5.1、构造函数实例化对象
开发语言·javascript·原型模式
勤奋的知更鸟15 小时前
Java编程之原型模式
java·开发语言·原型模式
じ☆ve 清风°2 天前
JavaScript 原型与原型链:深入理解 __proto__ 和 prototype 的由来与关系
开发语言·javascript·原型模式
产品设计大观3 天前
拆解实战案例:电商ERP管理系统从需求到原型全流程设计
产品经理·原型模式·erp·墨刀·erp系统·原型设计·电商erp系统
_r0bin_4 天前
前端八股之JS的原型链
原型模式
将编程培养成爱好4 天前
《复制粘贴的奇迹:小明的原型工厂》
c++·设计模式·原型模式
独步炎凉的大彬5 天前
new操作符具体做了什么
开发语言·javascript·原型模式
linux-hzh10 天前
设计模式之原型模式
设计模式·原型模式
on the way 12310 天前
创建型设计模式之Prototype(原型)
设计模式·原型模式
秋田君13 天前
深入理解JavaScript设计模式之原型模式
javascript·设计模式·原型模式