光輝歲月

导航

 

  第一次好好的看设计模式,可能有不对的地方,大佬们可以下面指出,感谢!

  ----------- 分割线 ----------

 

  简历复印——原型模式

  简历复印,一个复制过程,原型模式即一个复制过程。

UML图:

 

Prototype:抽象接口,定义一个可以复制自己的方法;
ConcretePrototype1:Prototype的具体实现;
ConcretePrototype2:Prototype的具体实现;
Client:具体调用


使用场景:在代码中需要复制一个对象,尤其是深复制,不可使用object.clone的时候,原型模式派上用场;浅复制,不能让外部修改对象里面属性时,可使用浅复制。

Prototype类:

实现类:

程序调用:

这个位置克隆的是copyOne,可以看出每次都是不同的copyOne,实现了原型复制;

克隆copyTwo:

哪个实现类克隆,就是克隆哪个对象,简单原型模式这样就实现了。

升级版——Cloneable :

程序调用:

这个时候有个问题,如果我的简历对象里面还包含了一个对象呢,也能复制过去吗?原型模式中的浅复制和深复制:浅复制——只复制对象本身属性,不复制锁包含对象;深复制——不仅复制了属性,而且复制了里面所包含对象(当然需要自己实现);先到这了,饿了,吃饭了,回头补充深复制和浅复制。

 浅复制,简历类里面新增一个履历类:

这时候程序调用:

发现只需要修改了履历这个对象,其他类里面的履历对象属性跟着改变,原因是浅复制只是复制了对象里面所包含对象的引用,都是同一个对象,所以哪里改变了,就会都跟着改变!

深复制:

Experience类也实现Cloneable ,修改简历类的clone方法:

程序调用:

这时候,第一个简历里面的履历类并没有被更改,完成深复制。

 

posted on 2019-06-28 12:00  光輝歲月  阅读(227)  评论(2编辑  收藏  举报