美文网首页
Java设计模式-原型模式

Java设计模式-原型模式

作者: 小薯条学技术 | 来源:发表于2023-05-05 11:05 被阅读0次
image.png

简介

原型模式是一种创建型设计模式,它允许在运行时通过复制现有对象来创建新对象,而不是通过构造函数创建。这个模式的核心思想是基于一个现有的对象克隆一个新的对象,这个过程对外部世界是透明的,就像对象从未被克隆过一样。

原型模式的一个关键优点是可以避免在创建对象时重复性地执行复杂的初始化操作,从而提高了程序的性能和可维护性。与其他创建型模式相比,原型模式的一个显著特点是允许使用原型对象来生成多个具有不同状态的克隆对象。

与工厂模式相比,原型模式不需要创建具体的工厂类来创建新的对象,而是通过复制一个现有对象来生成新的对象。与建造者模式相比,原型模式不需要分步骤创建一个对象,而是通过克隆现有对象来生成新的对象。

实现

假设我们有一个名为Book的类,它包含了书的基本属性,如书名、作者和出版商。我们想要使用原型模式来复制这个类的对象,以便可以在程序中动态地创建多个不同状态的Book对象。我们可以先创建一个原型对象,然后使用该原型对象的克隆方法来创建新的对象。

下面是Book类的代码实现:

public class Book implements Cloneable {
    private String title;
    private String author;
    private String publisher;

    public Book(String title, String author, String publisher) {
        this.title = title;
        this.author = author;
        this.publisher = publisher;
    }

    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    public String getPublisher() {
        return publisher;
    }

    public Book clone() {
        try {
            return (Book) super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }
}


我们在Book类中实现了Cloneable接口,这是使用原型模式必须的步骤。Book类包含了三个属性:titleauthorpublisher,以及一个clone方法。clone方法使用Java提供的Object.clone方法来复制一个新的Book对象。

下面是在Java中使用原型模式创建新的Book对象的示例代码:

public class PrototypeDemo {
    public static void main(String[] args) {
        Book prototype = new Book("Design Patterns", "Erich Gamma, Richard Helm, Ralph Johnson, 
                                  "John Vlissides","Addison-Wesley Professional");
    Book book1 = prototype.clone();
    book1.setTitle("Head First Design Patterns");
    System.out.println("Book 1: " + book1.getTitle() + " by " + book1.getAuthor() +
                       " (published by " + book1.getPublisher() + ")");
    Book book2 = prototype.clone();
    book2.setAuthor("Joshua Bloch");
    System.out.println("Book 2: " + book2.getTitle() + " by " + book2.getAuthor() + 
                       " (published by " + book2.getPublisher() +   ")");
    }
}

在这个示例中,我们首先创建一个原型对象prototype,然后使用该对象的clone方法来创建两个新的Book对象。我们分别修改了这两个对象的属性,以展示它们具有不同的状态。最后,我们输出了这两个对象的属性值。

原型模式的优缺点

优点

  1. 通过原型模式,我们可以避免创建复杂对象时的开销。
  2. 原型模式提供了一种更加灵活的方式来创建新对象。
  3. 原型模式能够保护现有对象的状态。

缺点

  1. 在实现原型模式时,必须注意克隆对象的所有属性,包括私有属性和引用类型属性。
  2. 如果原型对象的属性包含大量数据,那么复制对象的成本将会很高。
  3. 需要实现Cloneable接口,并且需要重写clone方法,这会增加代码量和复杂度。
  4. 克隆对象时需要注意深浅拷贝的问题,以免出现意料之外的错误。

总结

原型模式是一种用于对象复制的设计模式。它通过复制现有对象来创建新的对象,从而降低了对象创建成本。虽然原型模式有一些缺点,例如必须复制对象的所有属性和克隆大量数据的成本,但是它仍然是一个有用的设计模式,特别是在需要创建相似对象或保护现有对象状态的场景中。

相关文章

  • Java设计模式之04_Prototype(原型模式)

    更多Java设计模式:Java设计模式-目录 原型模式是一种简单、易使用的创建型设计模式,通过给出一个原型对象来指...

  • Java设计模式——原型模式

    Java设计模式之原型模式 回顾 Java设计模式系列的上一期写了工厂模式,那么创建类的设计模式还有生成器模式和原...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • Java架构师课程

    Java架构班开学典礼 Spring中常用的设计模式概述及工厂模式详解 单例模式及原型模式单例模式及原型模式单例模...

  • Java设计模式<原型模式>

    Java设计模式<原型模式> 意图 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思...

  • 总览

    1 书籍推荐 《Java设计模式》 2 分类 创建型模式 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模...

  • 10、原型模式(Prototype Pattern)

    1. 原型模式 1.1 简介   原型模式又叫克隆模式,顾名思义该模式是克隆对象的代码逻辑的设计。在《JAVA与模...

  • java23种设计模式

    java的设计模式大体上分为三大类:创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式...

  • Spring 准备内容

    准备内容 原型设计模式 PropotypeModle 原型模式也属于创造型设计模式,用原型实例指定创建对象的种类,...

  • Java设计模式

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模...

网友评论

      本文标题:Java设计模式-原型模式

      本文链接:https://www.haomeiwen.com/subject/twofsdtx.html