设计模式 原型模式

创建对象确实是一个耗时的过程,也是一件昂贵的事情。 因此,我们现在正冒险节省时间和金钱。 我们该怎么做?

克隆奇迹多莉

有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物。 好吧,我不想深入研究细节,但是关键是全部与克隆有关。 这是关于创建副本。

原型设计模式与这个现实示例非常相似。 这是“四个设计模式的帮派”的“创新设计模式”系列的另一部分。

因此,此模式通过克隆对象而不是与Factory模式不同的创建来工作。

何时使用此模式?

  • 创建对象的成本是昂贵还是复杂。
  • 尝试将应用程序中的类数保持在最低限度时
  • 在运行时添加或删除对象时
  • 当客户端应用程序不需要知道对象的创建,组成和表示时。
  • 需要与现有对象相似的对象

原型模式有什么作用?

原型模式允许通过复制现有实例来制作新实例。 原型模式会导致克隆的对象与原始对象不同。 克隆时,原始状态与克隆相同。 之后,每个对象可以经历状态改变。 我们可以修改对象以执行不同的事情。 唯一的好处是,客户端可以在不知道实例化哪个特定类的情况下创建新实例。

结构体:

原型类通过实现Cloneable接口并使用clone()方法声明一个用于克隆自身的接口。 具体原型实现了用于克隆自身的clone()方法。 客户端类通过要求Prototype克隆自己而不是使用new关键字来创建一个新对象。

原型图案结构

事件流以原始类(例如A类)已经初始化和实例化的方式工作。 这是因为我们不能按原样使用克隆。 我们需要在使用它之前实例化原始类(A类)。 然后,客户端向Prototype类请求与A类相同类型的新对象。根据所需对象类型的具体原型通过使用clone()方法克隆自身来提供对象。

设想一个场景,其中可能存在一些要求,我们必须从后端获取用户配置文件数据以进行多种处理,例如用户配置文件或角色等,而这些更改不会经常更改。 因此,我们可能不得不使用昂贵的数据库资源,连接和事务。 在这种情况下,我们可以将数据存储在单个调用中,并将其缓存在会话中以进行进一步处理。

在上面的示例中,UserProfile对象是将被克隆的主要对象。 UserProfile实现Cloneable接口。 BankDetails和Identity类从UserProfile类继承。 这些是具体的原型类。

我们引入了一个名为UserProfileRegistry的新类,该类可找到适当的UserProfile实例,然后将克隆适当地返回给客户端类。

原型模式示例

要在运行时创建另一个对象(要克隆的对象的真实副本)时,需要克隆()一个对象。 真实副本意味着新创建的对象的所有属性应与您要克隆的对象相同。 如果可以通过使用new实例化该类,则将获得一个具有所有属性作为其初始值的Object。 例如,如果您正在设计一个用于执行银行帐户交易的系统,那么您将想要制作一个保存您的帐户信息的对象的副本,对其进行交易,然后将原始对象替换为修改后的对象。 在这种情况下,您可能希望使用clone()而不是new。

有趣的 一点

  • 创意设计模式可以共存,例如,抽象工厂,构建器和原型可以在实现过程中使用单例模式,或者它们也可以单独工作。
  • 原型模式肯定需要初始化操作,但不需要子类化,但是Factory Method需要子类化,但不需要初始化操作。
  • 在银行交易昂贵的数据库查询中,这是有利的。 缓存可能会有所帮助,并且原型模式是对此情况的最佳解决方案,因为可以使用具有银行帐户信息或用户配置文件信息的对象的副本,对其进行事务处理,然后将原始对象替换为修改后的对象。
  • 上面的示例使用了浅克隆方法。 但是,我们也可以通过深度克隆来实现。 有关此主题的详细说明,请参见我们的文章: 深入研究克隆

优点:

  • 隐藏了创建对象的复杂性。
  • 客户可以在不知道对象类型的情况下获取新对象。
  • 减少子类化。

退税:

  • 使用原型的缺点是制作对象的副本有时会很复杂。
  • 具有循环引用其他类的类不能真正被克隆。

下载源代码:

参考: 原型设计模式:在Idiotechie博客上从我们的JCG合作伙伴 Mainak Goswami 创建另一个小车 。

翻译自: https://www.javacodegeeks.com/2012/11/prototype-design-pattern-creating-another-dolly.html

设计模式 原型模式

设计模式 原型模式_原型设计模式:创建另一个小车相关推荐

  1. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  2. java设计模式迭代器模式_迭代器设计模式示例

    java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...

  3. 设计模式 指令模式_指令设计模式

    设计模式 指令模式 Command Pattern is one of the Behavioral Design Pattern. Command design pattern is used to ...

  4. 原型设计模式:创建另一个小车

    创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正努力节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. 好吧,我不想深入研究 ...

  5. 18 原型模式(原型设计模式)详解

    创建型模式: 单例(Singleton)模式.原型(Prototype)模式.工厂方法(Factory Method)模式.抽象工厂(Abstract Factory)模式和建造者(Builder)模 ...

  6. 设计模式-Prototype模式(原型模式)

    目录 原型模式是什么? 为什么要用原型模式? 原型模式是什么? Prototype模式:不根据类来生成实例,而是根据实例来生成新实例. 怎么理解呢?举个例子,就是比如现在我们只有两个类,球(Ball) ...

  7. 【原型模式】原型模式深入分析

    文章目录 1. 原型模式 2.原型模式的应用场景 3. 原型模式的通用写法 3.1 先创建 IProtoType 接口 3.2 创建具体需要克隆的类 3.3 测试代码: 3.3.1 运行结果: 浅克隆 ...

  8. 设计模式 - 创建型模式_原型模式

    文章目录 创建型模式 概述 Case 场景模拟⼯程 Bad Impl Better Impl (原型模式重构代码) 小结 创建型模式 创建型模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性 ...

  9. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

最新文章

  1. 差异表达基因-火山图和聚类图解释
  2. springboot整合ElasticSearch出现的问题
  3. Devstack配置负载均衡,负载均衡版本V2
  4. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)
  5. 它成为全球最受关注度的行业之一,连续5年都提到它
  6. python编写正则表达式匹配单词_Python正则表达式匹配整个单词
  7. 【今日CV 计算机视觉论文速览】Mon, 28 Jan 2019
  8. b超可以看出什么_B超可以查出什么
  9. apache tomcat linux 配置,linux下apache+tomcat配置
  10. 查看服务器虚拟机版本,查看虚拟机版本命令
  11. 玩客云服务器怎么卖,玩客云使用教程;低价NAS怎么打造;玩客云现在还值得入手吗?-聚超值...
  12. Unity安卓端重启游戏
  13. 基于C#的在线语音识别软件开发
  14. MySQL临时表的使用
  15. 创业日志(三十)华东华南之10天7市行
  16. python基础之温度转换
  17. mysql 1033_mysql报错1033 Incorrect information in file: ''''xxx.frm''''问题的解决方法(图)...
  18. 神州优车推出智慧交通开放平台 3年将投入3亿元
  19. Apollo搭建使用
  20. 反编译打包apk后无法安装正版apk提示:Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

热门文章

  1. JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser
  2. SpringCloud配置中心客户端读取配置
  3. python爬虫进阶(初始)
  4. 详细整理分层开发步骤!
  5. Struts文件上传与下载详解_文件的下载
  6. android之微信分享文本
  7. 鸿蒙os更新要求,华为鸿蒙OS即将迎来升级 手机版本或仍需时间
  8. Java版大顶堆的实现
  9. 重新学习Spring2——IOC和AOP原理彻底搞懂
  10. java 8 新功能详解_Java 8和Java 14之间的新功能