# gupaoedu-vip-pattern-prototype **Repository Path**: lichaoying/gupaoedu-vip-pattern-prototype ## Basic Information - **Project Name**: gupaoedu-vip-pattern-prototype - **Description**: java架构师_设计模式_原型模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-01-08 - **Last Updated**: 2022-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java架构师-设计模式-原型模式 --- ## 原型模式:***拔一根猴毛,吹出千万个*** spring 可参考 ArrayList PrototypeBean BeanUtils --- # 应用场景 > 你一定遇到过大篇幅 getter、setter 赋值的场景原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 > > 1、类初始化消耗资源较多。 > > 2、new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等) > > 3、构造函数比较复杂。 > > 4、循环体中生产大量对象时。 > > 在 Spring 中,原型模式应用得非常广泛。例如 scope=“prototype”, > ## 简单克隆 特点:着复制的不是值,而是引用的地址 ## 深度克隆 特点:完全复制一个单独的个体 我们换一个场景,大家都知道齐天大圣。首先它是一只猴子,有七十二般变化,把一根毫毛就可以吹出千万个泼猴,手里还拿着金箍棒,金箍棒可以变大变小。这就是我们耳熟能详的原型模式的经典体现。 ## 克隆破坏单例模式 如果我们克隆的目标的对象是单例对象,那意味着,深克隆就会破坏单例。实际上防止克隆破坏单例解决思路非常简单,禁止深克隆便可。要么你我们的单例类不实现 Cloneable 接口;要么我们重写 clone()方法,在 clone 方法中返回单例对象即可 ```java @Override protected Object clone() throws CloneNotSupportedException { return INSTANCE; } ```