前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「聊设计模式」之原型模式(Prototype)

「聊设计模式」之原型模式(Prototype)

原创
作者头像
bug菌
发布2023-11-08 00:07:56
5021
发布2023-11-08 00:07:56
举报
文章被收录于专栏:《项目实战教学》

🏆本文收录于聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅!


大家上午好,我是bug菌,今天我们继续聊设计模式。

前言

  设计模式是软件开发中经过长期实践总结的经验和规范,它们被广泛应用于软件开发中,可以提高代码的复用性、可维护性、可读性等方面的质量。本篇文章将介绍原型模式(Prototype),并通过Java语言实现,将对该模式的特点及应用有更深入的了解。

摘要

  原型模式是一种通过复制现有对象来生成新对象的设计模式。该模式的优点在于可以避免重复创建对象,并且能够在运行时动态添加或删除对象。本篇文章将通过一个例子,深入探讨原型模式的应用。

原型模式

1. 模式介绍

  原型模式(Prototype)是一种创建型设计模式,它提供了创建对象的一种最佳方法,通过复制现有对象来生成新对象。该模式的核心在于通过复制现有的实例对象来创建新的实例对象,从而避免了重复创建对象的开销。

2. 模式结构

原型模式的结构包含以下几个部分:

  1. 抽象原型类(Prototype):定义了一个抽象接口,用于复制自己。
  2. 具体原型类(ConcretePrototype):实现了抽象原型类的接口,在复制自己时可以生成一个新的对象。
  3. 客户端(Client):调用具体原型类的clone方法复制对象。

如下是原型模式的UML类图:

3. 模式实际应用

原型模式在实际应用中常用于以下场景:

  1. 创建复杂的对象,并且创建过程比较耗时,通过克隆现有的对象来提高对象的创建效率。
  2. 通过配置文件等方式,动态生成对象,避免在代码中硬编码对象的创建过程。
  3. 需要创建一组相似的对象,通过克隆现有的对象来避免重复创建相似的对象。
  4. 在框架和工具类中,通过原型模式来实现对象的复用。

4. 原型模式的优缺点

4.1 优点包括:

  1. 可以避免重复创建相似的对象,提高代码执行效率。
  2. 可以动态生成对象,避免在代码中硬编码对象的创建过程。
  3. 可以创建一组相似的对象,避免重复创建相似的对象。
  4. 可以实现对象的复用,减少对象的创建次数,降低系统开销。

4.2 缺点包括:

  1. 在使用原型模式时,需要注意原型对象的克隆方式,即浅克隆和深克隆。
  2. 需要对每个具体原型类进行单独的克隆方法的实现,增加了代码的复杂度。

5. 模式注意事项

在使用原型模式时,需要注意以下事项:

  1. 需要对每个具体原型类进行单独的克隆方法的实现。
  2. 在克隆对象时,需要注意对象属性的克隆方式,即浅克隆和深克隆。
  3. 在使用深克隆时,需要注意对象属性的引用对象也需要进行克隆。

6. 模式实现

下面我们通过一个例子,来演示如何实现原型模式。

首先,我们定义一个抽象原型类Prototype,其中包含了一个clone方法。

代码语言:java
复制
package com.example.javaDesignPattern.prototype;

/**
 * 抽象原型类
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/9/19 10:22
 */
public abstract class Prototype implements Cloneable {
    public abstract Prototype clone();
}

然后,我们定义一个具体原型类ConcretePrototype,用于实现Prototype接口并复制自己。

代码语言:java
复制
package com.example.javaDesignPattern.prototype;

/**
 * 具体原型类
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/9/19 10:22
 */
public class ConcretePrototype extends Prototype {
    @Override
    public Prototype clone() {
        return new ConcretePrototype();
    }
}

最后,我们在客户端中调用具体原型类的clone方法,并生成新的对象。

代码语言:java
复制
package com.example.javaDesignPattern.prototype;

/**
 * 客户端
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/9/19 10:22
 */
public class Client {
    public static void main(String[] args) {
        Prototype prototype = new ConcretePrototype();
        Prototype clone = prototype.clone();
        System.out.println(clone);
    }
}

执行结果如下:

7. 代码分析

  如上代码示例是一个原型模式。原型模式是一种创建型设计模式,它允许通过克隆现有对象来创建新对象,而无需显式地实例化对象并使用构造函数。

  在这个示例中,我们定义了一个 Prototype 接口,包含一个 clone() 方法。然后我们创建了一个具体的原型类 ConcretePrototype,它实现了 Prototype 接口并重写了 clone() 方法。

  在客户端中,我们首先创建一个 ConcretePrototype 对象,并将其赋值给 Prototype 类型的变量 prototype。然后我们调用 prototype 对象的 clone() 方法来创建一个新对象,这个新对象是原型对象的一个副本。

  该示例代码的目的是演示如何使用原型模式来克隆对象。在实际应用中,通常会使用原型模式来创建需要大量重复使用的对象,以提高系统性能和减少资源消耗。

8. 附录源码

  如上涉及代码均已上传同步在GitHub,提供给同学们参考性学习。

总结

通过本篇文章的介绍,我们可以了解到原型模式的特点和应用场景。该模式可以通过复制现有对象来生成新对象,并且能够在运行时动态添加或删除对象。它的优点在于避免了重复创建对象的开销,提高了代码的复用性、可维护性、可读性等方面的质量。因此,在软件开发中,原型模式是一个极具实用性的设计模式。

☀️建议/推荐你


  如果想系统性的全面学习设计模式,建议小伙伴们直接毫无顾忌的关注这个专栏《聊设计模式》,无论你是想提升自己的编程技术,还是渴望更好地理解代码背后的设计思想,本专栏都会为你提供实用的知识和启发,帮助你更好地解决日常开发中的挑战,将代码变得更加优雅、灵活和可维护!

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

  我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 摘要
  • 原型模式
    • 1. 模式介绍
      • 2. 模式结构
        • 3. 模式实际应用
          • 4. 原型模式的优缺点
            • 4.1 优点包括:
            • 4.2 缺点包括:
          • 5. 模式注意事项
            • 6. 模式实现
              • 7. 代码分析
                • 8. 附录源码
                • 总结
                • ☀️建议/推荐你
                • 📣关于我
                相关产品与服务
                腾讯云代码分析
                腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档