【设计模式】(四)原型

来源:互联网 发布:淘宝怎么申请二次售后 编辑:程序博客网 时间:2024/06/05 18:03
上文我们介绍了《【设计模式】(三)建造者》

本文将从以下方面(本质,应用场景,如何实现),介绍创建型之原型。


一. 本质

通过new产生一个对象需要非常繁琐的数据准备或访问权限,此时可以使用原型。

就是java中的克隆技术,以某个对象为原型,复制出新的对象。

优势:效率高(直接克隆,避免了重新执行构造过程步骤)

克隆类似于new,但不同于new。

new创建新的对象属性采用的是默认值。

克隆出的对象的属性完全和原型对象相同。新对象的改变不会影响原型对象。

二. 应用场景

很少单独出现,一般是和工厂方法模式一起出现,通过clone方法创建一个对象,然后工厂方法提供给调用者。

Spring中bean的创建实际就是两种:单例模式(搭配工厂模式)和原型模式。

JavaScript语言中,继承的实现方式

三. 如何实现?

Cloneable接口和clone方法(Object中)。Java提供了clone()方法实现了内存复制。

利用序列化和反序列化技术实现深克隆。

四. 效率测试

短时间内大量创建对象时,原型和new的效率测试

五. Demo演示

1. Cloneable接口和clone方法,实现浅复制!

1)Sheep.java

public class Sheep implements Cloneable {private String name;private Date birthday;@Overridepublic Object clone() throws CloneNotSupportedException {// 直接调用object的clone方法return super.clone();}}
2)Client测试

public class Client {public static void main(String[] args) throws CloneNotSupportedException {Sheep sheep1 = new Sheep("喜羊羊", new Date(2015 - 10 - 1));Sheep sheep2 = (Sheep) sheep1.clone();sheep1.setName("懒洋洋");System.out.println("sheep1:" + sheep1);System.out.println("sheep2:" + sheep2);}}
3)打印结果

 




0 0
原创粉丝点击