首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

克隆羊问题:引出原型设计模式(Prototype模式)

前言 昨天学习了工厂模式,今天给大家带来另一种Java设计模式:原型设计模式。...,由此来引出我们的原型模式。...基本介绍 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象, 无需知道如何创建的细节...`工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建 的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()` 类图分析 [在这里插入图片描述] 代码设计 让上面的...总结 创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率 不用重新初始化对象,而是动态地获得对象运行时的状态 如果原始对象发生变化(增加或者减少属性),其它克隆对象的也会发生相应的变化

24100

设计模式-原型模式(克隆羊多利看了都说好)

文章目录 引例 原型模式 浅拷贝 深拷贝 引例 ---- 标题无意冒犯 在介绍原型模式前,我们先从实际问题出发,对比解决方法前后优劣点。...原型模式 ---- 原型模式(Prototype Pattern)是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节。...UML类图: Prototype:原型类,声明一个克隆自己的接口 ConcretePrototype: 具体的原型类, 实现一个克隆自己的操作 Client: 客户端让一个原型对象克隆自己,从而创建一个新的对象...原型模式又可分为浅拷贝和深拷贝,区别在于对引用数据类型的成员变量的拷贝,小朋友你是否有很多问号?...: 创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提 高效率 可以不用重新初始化对象,动态地获得对象运行时的状态。

37510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    原型模式--克隆怪物大军

    小帅决定用原型模式快速地克隆怪物,让怪物大军迅速集结。 原型模式 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。...原型是一种创建型设计模式, 使你能够复制对象, 甚至是复杂对象, 而又无需使代码依赖它们所属的类。...,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(拷贝、克隆)的方式,来创建新对象,以达到节省创建时间的目的。...原型模式是在内存二进制层面拷贝对象,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更加高效。 这就是原型模式,是不是很简单?...最后,我们看看原型模式的优点和缺点: 优点 可以克隆对象, 而无需与它们所属的具体类相耦合。 可以克隆预生成原型, 避免反复运行初始化代码。 可以更方便地生成复杂对象。

    22420

    原型模式【原型设计模式】

    原型模式的定义 原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。...原型模式的优缺点 原型模式的优点 Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。...可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可辅助实现撤销操作。...原型模式的结构 原型模式包含以下主要角色。 抽象原型类:规定了具体原型对象必须实现的接口。 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。...访问类:使用具体原型类中的 clone() 方法来复制新的对象。 原型模式的实现 原型模式的克隆分为浅克隆和深克隆。

    33330

    原型模式以及克隆技术

    定义 原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建...这其实就使用了原型模式的设计模式,创建一个对象过于麻烦的时候,我们只需要创建一次,后面再创建的话只需要对原对象进行克隆即可。...对于以上的问题,我们可以使用原型模式进行优化。...总结 实现原型模式的三种方式:实现Cloneable接口、序列化对象、反射机制。 原型模式的优点: 提高了创建对象的性能,避免了调用构造器创建对象。...以上就是原型模式的学习,更多的java技术分享,就关注java技术爱好者吧! 能力有限,如果有什么错误或者不当之处,请大家批评指正,一起学习交流!

    42930

    原型模式(克隆生成对象)

    因为原型模式足够简单,所以才让人误解原型模式并不那么值得深入了解(因为起初我也是众多轻视者中的其中之一),但是事实上它可以很重要。...(这在Java类继承中是不可接受的)。 于是我们想到了原型模式,即克隆父对象并让子对象持有父对象(克隆)的引用,借此来避免这个问题。 代码实现 声明原型链接口,用于实现如上图的聚合关系。...、初始化过程,但同时也因为原型模式产生了大量的内存对象。...总结 原型模式的本质:克隆生成对象。 使用原型对象可以封装对象的创建过程,至于对象的初始化过程是否需要封装则依据使用者的需求决定。 原型对象会产生大量的内存对象,所以请勿过度使用原型模式。...如果的确需要大量使用原型模式,请考虑结合原型管理器缓存原型实例。

    50560

    原型设计模式

    1.概要 原型设计模式(Prototype Pattern)的主要思想是通过克隆现有对象来创建新的对象,而不是通过new关键字直接实例化。它包含两个核心概念:原型接口和具体的实现类。...原型接口声明了克隆方法,具体的实现类实现了这个接口,实现了克隆方法来创建新的对象实例。当需要创建新对象时,客户端不再负责实例化对象,而是通过克隆现有的对象。...适用场景 原型设计模式适用于以下情况: 当创建一个对象的过程比较复杂,且创建新对象的成本较大时,可以使用原型模式,通过克隆已有对象来创建新对象,避免耗费过多资源。...当一个系统需要独立于其产品创建、构成和表示时,可以使用原型模式。通过克隆现有的对象,系统可以在运行时选择需要的对象配置。 当需要避免与产品类层次结构耦合时,可以使用原型模式。...否则,修改克隆对象的引用类型会影响原对象。 破坏封装: 在使用原型模式时,需要将克隆方法暴露在外部,破坏了对象的封装性。 复杂性: 如果对象的构造比较复杂,克隆方法的实现可能会较为困难。

    17040

    『设计模式』设计模式--原型模式

    1.概念: 原型模式(Prototype Pattern)是通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类对象,同时又能保证性能而且不需要知道内部细节。...这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。...建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。 如何解决: 利用已有的一个原型对象,快速地生成和原型对象一样的实例。...IClonabe接口中有一Clone方法,可以在类中复写,实现自定义的克隆方法。 原型模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些"易变类"拥有稳定的接口。...克隆的实现有两种方法,浅拷贝(shadow),和深拷贝(deep)。 优点: 性能提高。 逃避构造函数的约束。

    1.2K50

    设计模式:原型模式

    原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而不是通过实例化类来创建。在Go中,原型模式可以通过使用interface和struct来实现。...原型模式在什么场景使用 原型模式的使用场景包括:1. 类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。 2....通过new一个对象需要非常繁琐的数据准备或访问权限,可以使用原型模式。 3....性能高,使用原型模式复用的方式创建实例对象,比使用构造函数重新创建对象性能要高(针对类实例对象开销大的情况)。 2....流程简单,原型模式可以简化创建的过程,可以直接修改现有的对象实例的值,达到复用的目的(针对构造函数繁琐的情况)。 原型模式的缺点包括: 1.

    13120

    【设计模式-原型模式】

    有些场景中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效。...比如王者里面的小兵,只需创建一个小兵的原型,之后就只需要进行克隆复制就行了。 一、定义 原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。...我在代码中只修改了原型的血量,但是从结果看,克隆出来的类的血量也被修改了,这就是浅克隆,只是简单的将地址赋值给了对象,只要原型一变,克隆对象也会改变。...深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。 那么如何使用深克隆呢? 这就需要重写原型的clone方法以及原型属性需要实现Cloneable接口。...此时克隆对象的血量就不会随着原型变化而变化了。 三、源码实例 实现了Cloneable的接口都属于这种模式。

    32340

    设计模式——原型模式

    设计模式——原型模式 强烈推介IDEA2020.2破解激活,IntelliJ IDEA...这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。...一、基本介绍 ----   ●  原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。  ...●  原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节。  ...3)、Client 让一个原型对象克隆自己,从而创建一个新的对象(相当于属性)。 ? 三、原型模式案例分析 ---- 【1】克隆类需要实现 Cloneable 重写 clone 方法。

    30420

    设计模式--原型模式

    原型模式是一种创建型设计模式,它允许通过克隆现有对象来创建新对象,而无需从头开始创建。通过复制已有对象,原型模式可以减少创建对象所需的时间和成本,因为它避免了大量的初始化过程。...在原型模式中,可以使用简单的克隆或深度克隆。简单的克隆只复制私有字段和属性,而深度克隆还将复制所有关联对象。选择哪种克隆方法取决于对程序使用方式的要求。...下面是使用C#编写的一个原型模式实例:using System;public class Person : ICloneable{ public string Name { get; set; }...两个Person对象person1和person2初始属性相同,但通过修改person2的Age属性来改变其值,person1的属性没有改变。...通过这种方式,原型模式提供了一种创建对象的灵活和高效的方式。

    19840

    设计模式-原型模式

    原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。...当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。...以获取多种形状为例,共分四步: 1、 创建一个实现了 Cloneable 接口的抽象类。...("3"); shapeMap.put(square.getId(), square); } } 4、使用 ShapeCache 类来获取存储在 Hashtable 中的形状的克隆...// 使用 ShapeCache 类来获取存储在 Hashtable 中的形状的克隆。

    20970

    设计模式---原型模式

    为了解决这个问题,我们引入原型模式。请看以下样例。...System.out.println(department.employees == department1.employees); // false }}基于序列化和反序列化实现的克隆不仅仅是深度克隆...,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出异常,这种是方案明显优于使用Object类的clone方法克隆对象。...让问题在编译的时候暴露出来总是优于把问题留到运行时。总结优点由于是直接从内存中读取对象进行克隆,所以性能卓越。代码量不论是相较于传统写法要精简很多,尤其是序列化与反序列化的方式。...缺点代码的理解难度增加。尤其是深拷贝的理解较为复杂。适用场景适用于只有细微参数变动的对象创建。适用于需要备份的场景。如,当业务执行过程中,某种情况下需要数据回滚的时候,提前备份可以使用。

    19000

    设计模式---原型模式

    原型模式 介绍 角色 Java语言提供的clone()方法 代码演示---克隆羊 结论 深浅拷贝 深浅拷贝探讨 实现深克隆的方式一 : 手动对引用对象进行克隆 实现深克隆的方式一 :序列化 原型模式对单例模式的破坏...原型模式是一种对象创建型模式。 原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。...原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。...原型模式提供了简化的创建结构,工厂方法模式常常需要有一个与产品类等级结构相同的工厂等级结构,而原型模式就不需要这样,原型模式中产品的复制是通过封装在原型类中的克隆方法实现的,无须专门的工厂类来创建产品。...需要避免使用分层次的工厂类来创建分层次的对象,并且类的实例对象只有一个或很少的几个组合状态,通过复制原型对象得到新实例可能比使用构造函数创建一个新实例更加方便。

    40510

    设计模式——原型模式

    设计模式中,单例模式应该是大家最为熟悉的了,那如果我们需要对一个对象进行多次复制的话,大家会用什么呢?这就要用到今天要讲的原型模式了。...具体来说就是,通过给出一个原型对象来指明所创建的对象的类型,然后使用自身实现的克隆接口来复制这个原型对象,该模式就是用这种方式来创建出更多同类型的对象。...在开辟的内存空间中创建对象。 调用对象的构造函数进行初始化对象。 而一个对象通过 clone() 创建过程为: 根据原对象内存大小开辟一块内存空间。 复制已有对象,克隆对象中所有属性值。...相对 new 来说,clone() 少了调用构造函数。如果构造函数中存在大量属性初始化或大对象,则使用 clone() 的复制对象的方式性能会好一些。...除此之外,原型模式在开源框架中的应用也非常广泛。例如 Spring 中,@Service 默认都是单例的。

    41720

    设计模式 -- 原型模式

    表述 (创建型模式) 用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象 这里的复制指深复制 关于深浅复制传送门 深复制就是开辟新内存实现真正的内存复制 浅复制, 只复制指针,...原型模式类图 原型模式类图 Prototype(原型类):声明一个拷贝自身的接口 ConcretePrototype1和ConcretePrototype2:为Prototype的子类,实现自身的clone...方法 优点 简化对象的创建,把创建的过程封闭到对象的内部 使用场景 需要创建的对象应独立于其类型与创建方式(想要的对象并不能够直接通过初始化函数来创建出来,其创建过程不具有普遍性且复杂) 要实例化类是在运行时决定的...(在编写代码的时候并不知道哪种对象会被创建出来,其内部的结构如何复杂 不想要与产品层次相对应的工厂层次(不通过工厂方法或者抽象工厂来控制产品的创建过程,想要直接复制对象) 有很多的相关的类,其行为略有不同...,而且主要差异在于内部属性,如名称等 类不容易创建,比如每个组件可把其他组件作为子节点的组合对象。

    16410
    领券