Java学设计模式之原型模式

一、原型模式概念

原型模式是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而不是通过实例化类来创建。这种方式可以提高创建对象的效率,特别是当对象的创建过程比较昂贵或复杂时。

在原型模式中,原型对象是一个已经存在的对象,它作为新对象的模板。新对象通过复制原型对象的属性来创建,可以是浅拷贝(只复制基本数据类型的属性)或深拷贝(复制对象的所有属性,包括引用类型的属性)。

原型模式通常涉及以下几个角色:

  1. 原型接口(Prototype):定义了一个克隆自身的接口,可以是抽象类或接口。

  2. 具体原型类(Concrete Prototype):实现了原型接口,提供了克隆自身的方法。

  3. 客户端(Client):负责创建新对象的地方,通常通过克隆现有对象来创建新对象。

1.1 什么是原型模式

二、原型模式代码

2.1 原型接口

public interface Prototype {
    Prototype clone();
}

2.2 具体原型类

public class ConcretePrototype implements Prototype {
    private String property;

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

    public void setProperty(String property) {
        this.property = property;
    }

    public String getProperty() {
        return property;
    }

    @Override
    public Prototype clone() {
        return new ConcretePrototype(this.property); // 浅拷贝
    }
}

2.3 客户端

public class PrototypePatternTest {
    public static void main(String[] args) {
        ConcretePrototype prototype = new ConcretePrototype("Initial Property");
        System.out.println("原型:" + prototype.getProperty());

        ConcretePrototype clonedPrototype = (ConcretePrototype) prototype.clone();
        System.out.println("克隆的原型: " + clonedPrototype.getProperty());

        // 修改原型属性不影响克隆对象
        prototype.setProperty("Modified Property");
        System.out.println("修改后的原型: " + prototype.getProperty());
        System.out.println("修改后的克隆原型: " + clonedPrototype.getProperty());

        // 输出:
        // 原型:Initial Property
        // 克隆的原型: Initial Property
        // 修改后的原型: Modified Property
        // 修改后的克隆原型: Initial Property
    }
}

三、总结

原型模式的优点包括:

  • 减少了创建对象的开销,特别是当对象的创建过程比较复杂时。
  • 可以通过复制现有对象来创建新对象,使得代码更加灵活,易于维护。

原型模式的缺点包括:

  • 需要实现克隆方法,有时可能会比较麻烦。
  • 如果对象的构造过程比较复杂,克隆可能并不是一个很好的选择。

总的来说,原型模式适用于需要创建大量相似对象,并且创建过程比较昂贵的情况下。

posted @ 2024-05-09 14:47  启航黑珍珠号  阅读(8)  评论(0编辑  收藏  举报