sql 新建网站,深圳龙华做网站公司,网站建设简介怎么样,中国企业网站开发创建对象确实是一个耗时的过程#xff0c;也是一件昂贵的事情。 因此#xff0c;我们现在正努力节省时间和金钱。 我们该怎么做#xff1f; 克隆奇迹多莉 有人记得多莉吗#xff1f; 是的#xff0c;是绵羊#xff0c;是第一个被克隆的哺乳动物。 好吧#xff0c;我不想… 创建对象确实是一个耗时的过程也是一件昂贵的事情。 因此我们现在正努力节省时间和金钱。 我们该怎么做 克隆奇迹多莉 有人记得多莉吗 是的是绵羊是第一个被克隆的哺乳动物。 好吧我不想深入研究细节但是关键是全部与克隆有关。 这是关于创建副本。 原型设计模式与这个现实示例非常相似。 这是“四个设计模式的帮派”的“创新设计模式”系列的另一部分。 因此此模式通过克隆对象而不是与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