原型设计模式

原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制已有对象来创建新对象,而无需再经过实例化和初始化的过程。原型模式通过克隆(Clone)操作来创建对象的副本,使得对象的创建更加高效和灵活。

核心思想:

定义一个抽象原型(Prototype)接口,其中包含一个克隆方法(Clone),用于复制对象。
具体原型类实现抽象原型接口,实现克隆方法来复制自身。
客户端通过调用原型对象的克隆方法来创建新的对象副本。
原型模式可以分为深拷贝和浅拷贝两种:

深拷贝:复制对象及其所有关联对象,即使关联对象也进行递归复制。
浅拷贝:仅复制对象本身,不复制关联对象,关联对象仍然是原对象和新对象共享的。
示例:
假设我们有一个原型类Book,用于表示图书的基本信息,我们可以通过原型模式来创建新的图书对象。

// 原型接口:图书
interface BookPrototype {
    BookPrototype clone();
    void showInfo();
}

// 具体原型类:图书
class Book implements BookPrototype {
    private String title;
    private String author;
    private int pageCount;

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getPageCount() {
        return pageCount;
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    @Override
    public BookPrototype clone() {
        return new Book(title, author, pageCount);
    }

    @Override
    public void showInfo() {
        System.out.println("《" + title + "》 by " + author + ", " + pageCount + " pages.");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        // 创建原型对象
        BookPrototype prototype = new Book("Design Patterns", "Erich Gamma", 395);

        // 克隆对象
        BookPrototype book1 = prototype.clone();
        BookPrototype book2 = prototype.clone();

        // 修改克隆对象的信息
        ((Book) book1).setPageCount(300);
        ((Book) book2).setAuthor("Richard Helm");

        // 显示图书信息
        prototype.showInfo(); // 输出:《Design Patterns》 by Erich Gamma, 395 pages.
        book1.showInfo();     // 输出:《Design Patterns》 by Erich Gamma, 300 pages.
        book2.showInfo();     // 输出:《Design Patterns》 by Richard Helm, 395 pages.
    }
}

你可能感兴趣的:(设计模式,原型模式)