• 原型模式:复制对象的技巧


    欢迎来到设计模式系列的第六篇文章!在前面的几篇文章中,我们已经学习了一些常见的设计模式,今天我们将继续探讨另一个重要的设计模式——原型模式。

    原型模式简介

    原型模式是一种创建型设计模式,它主要用于复制对象。原型模式通过复制现有的对象来创建新的对象,从而避免了使用构造函数创建对象时的复杂初始化过程。这种方式在某些情况下可以提高性能,减少对象创建的开销。

    为什么需要原型模式?

    在某些情况下,创建一个对象的开销比较大,可能涉及到数据库查询、网络请求等耗时操作。如果我们需要创建多个相似的对象,每次都进行一次完整的对象创建过程可能会影响性能。原型模式通过复制已有的对象,可以避免重复创建对象的开销。

    原型模式的实现

    为了更好地理解原型模式,让我们通过一个例子来演示其实际应用。假设我们正在开发一个邮件系统,系统中需要发送不同类型的邮件,包括普通邮件和重要邮件。我们可以使用原型模式来复制邮件对象。

    首先,我们定义一个抽象的邮件原型类和具体的邮件类:

    // 抽象邮件原型类
    public abstract class MailPrototype implements Cloneable {
        protected String subject;
        protected String content;
    
        public abstract void send();
    
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
    
    // 具体邮件类
    public class OrdinaryMail extends MailPrototype {
        public OrdinaryMail(String subject, String content) {
            this.subject = subject;
            this.content = content;
        }
    
        @Override
        public void send() {
            System.out.println("发送普通邮件:主题:" + subject + ",内容:" + content);
        }
    }
    
    public class ImportantMail extends MailPrototype {
        public ImportantMail(String subject, String content) {
            this.subject = subject;
            this.content = content;
        }
    
        @Override
        public void send() {
            System.out.println("发送重要邮件:主题:" + subject + ",内容:" + content);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在客户端代码中,我们可以使用原型模式来创建和复制邮件对象:

    public class MailClient {
        public static void main(String[] args) throws CloneNotSupportedException {
            MailPrototype ordinaryMail = new OrdinaryMail("普通邮件", "这是一封普通邮件的内容");
            MailPrototype importantMail = new ImportantMail("重要邮件", "这是一封重要邮件的内容");
    
            MailPrototype copyOrdinaryMail = (MailPrototype) ordinaryMail.clone();
            MailPrototype copyImportantMail = (MailPrototype) importantMail.clone();
    
            ordinaryMail.send();
            importantMail.send();
            copyOrdinaryMail.send();
            copyImportantMail.send();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这个例子中,原型模式使得我们可以通过复制现有的邮件对象来创建新的邮件对象,从而避免了重复构建邮件对象的开销。

    小结

    本篇文章介绍了原型模式的概念、原理以及实际应用。原型模式通过复制现有对象来创建新对象,从而避免了对象创建过程中的开销。通过一个邮件系统的例子,我们学习了如何实现原型模式,并在客户端代码中应用。在下一篇文章中,我们将继续探讨其他设计模式,敬请期待!

  • 相关阅读:
    【Java成王之路】EE初阶第十八篇: 前端三剑客 HTML基础篇
    【算法|双指针系列No.8】leetcode18. 四数之和
    CA数字证书
    numpy用savez_compressed压缩数据
    推荐3款程序员常用的画图工具
    C语言实现windows,linux双版本下的进度条小程序,快来试一试吧
    IDEA2023 常用配置(JDK/系统设置等常用配置)
    DOM系列之动画函数封装
    【Elasticsearch教程16】Mapping字段类型之join
    12李沐动手学深度学习v2/数据复杂度与模型容量选择不当造成的 过拟合和欠拟合现象
  • 原文地址:https://blog.csdn.net/weixin_45701550/article/details/132652364