第一次好好的看设计模式,可能有不对的地方,大佬们可以下面指出,感谢!
----------- 分割线 ----------
简历复印——原型模式
简历复印,一个复制过程,原型模式即一个复制过程。
UML图:
Prototype:抽象接口,定义一个可以复制自己的方法;
ConcretePrototype1:Prototype的具体实现;
ConcretePrototype2:Prototype的具体实现;
Client:具体调用
使用场景:在代码中需要复制一个对象,尤其是深复制,不可使用object.clone的时候,原型模式派上用场;浅复制,不能让外部修改对象里面属性时,可使用浅复制。
Prototype类:
实现类:
程序调用:
这个位置克隆的是copyOne,可以看出每次都是不同的copyOne,实现了原型复制;
克隆copyTwo:
哪个实现类克隆,就是克隆哪个对象,简单原型模式这样就实现了。
升级版——Cloneable :
程序调用:
这个时候有个问题,如果我的简历对象里面还包含了一个对象呢,也能复制过去吗?原型模式中的浅复制和深复制:浅复制——只复制对象本身属性,不复制锁包含对象;深复制——不仅复制了属性,而且复制了里面所包含对象(当然需要自己实现);先到这了,饿了,吃饭了,回头补充深复制和浅复制。
浅复制,简历类里面新增一个履历类:
这时候程序调用:
发现只需要修改了履历这个对象,其他类里面的履历对象属性跟着改变,原因是浅复制只是复制了对象里面所包含对象的引用,都是同一个对象,所以哪里改变了,就会都跟着改变!
深复制:
Experience类也实现Cloneable ,修改简历类的clone方法:
程序调用:
这时候,第一个简历里面的履历类并没有被更改,完成深复制。