作者 | Java圣斗士 | 原创图文 ,转载请注明出处
全文1000字,阅读需要5分钟
![fdf09e70967e562dd0c106cd315859b5.png](https://i-blog.csdnimg.cn/blog_migrate/29d5921634267ccf9a195dc3a7b07295.jpeg)
哈喽,大家好,我是又皮又可爱的Java圣斗士,关注我,每天带你飞!
今天我们来聊一聊原型模式。
原型模式应该算是比较简单的一种设计模式,其实一个词就可以概括,那就是——克隆对象!
我们经常在各种影视作品中看到“克隆”这个科技元素,是不是十分带感呢?我记得小时候最令我震撼的克隆电影就是州长的《第六日》,里面讲述了一个......
咳咳咳,跑题了,总之这个电影挺不错的,建议大家可以找来看看。
![c2fc4f7e63371e16be819a9037591e4b.png](https://i-blog.csdnimg.cn/blog_migrate/bdf65425ae5f0117d220547f0c01f556.jpeg)
一、克隆其实很简单
原型模式的克隆对象是什么意思呢?没错,其实和克隆人一样,将对象进行一种克隆,节约创建对象所产生的开支。
那有的小伙伴要问了,为什么要克隆对象,直接 new 来创建对象不就OK了?
这里就需要引出原型模式的应用场景。
在实际生产中,往往会出现这样的应用场景。需要创建一定数目的某种对象,但是手工new的话可能不太方便,那么我们就可以使用这种原型模式来进行对象的创建,省去了对象属性的赋值,因为在使用原型模式的时候就已经将全部属性进行了拷贝。
![3724074b83459d793928f82d70629c44.png](https://i-blog.csdnimg.cn/blog_migrate/94e20f2aafe19be9794994823d0ac35e.jpeg)
二、Let me show you code
原型模式的实现过程非常简单。首先,我们需要让希望能够拷贝的类实现Cloneable接口:
public class MyEntry implements Cloneable {
这一步是必须的,Cloneable接口是一个标记接口,其内部没有任何抽象方法:
public interface Cloneable {}
这个接口只是为了表名当使用Object.clone()方法时是合法的,并且允许执行属性的拷贝。
为了能够体现普遍性,我们在MyEntry类中依赖一个Part对象,这个Part是一个引用类型,然后再在其内部依赖一个内部类:
public class Part {private String partName;private int score;private Inner inner = new Inner("inner