创建型模式-原型模式

发布于:2024-11-28 ⋅ 阅读:(13) ⋅ 点赞:(0)

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

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

原型模式的优点

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

适用场景

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

组成

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

代码

// 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);
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到