原型模式
来源:互联网 发布:无线游戏鼠标 知乎 编辑:程序博客网 时间:2024/06/04 18:49
定义
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. (用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象)
通用类图
原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:
- 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。
- 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。
优点:
- 性能优良。原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
- 逃避构造函数的约束。
示例
/** * Created by dushangkui on 2017/6/7. */public class PrototypeTest { public static void main(String[] args) throws CloneNotSupportedException { Student stu = new Student("张三",17); Student stu1=stu.clone(); stu1.setName("李四"); System.out.println(stu1); }}class Student implements Cloneable{ private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public Student clone() throws CloneNotSupportedException { return (Student)super.clone(); } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; }}
关于Java的深浅克隆请看这篇博文:http://blog.csdn.net/jiaotuwoaini/article/details/51329680
阅读全文
0 0
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型 模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 集群项目session 共享方案
- 自定义Java线程池
- JAVA局部变量加final修饰的好处
- spring-boot起步介绍Demo,廖师兄springboot学习笔记
- oracle添加栏位
- 原型模式
- Android四大组件-内容提供者
- Zurmo开发的小技巧(8)
- QML之Grid网格定位器
- eclipse maven项目中修改 tomcat 部署路径
- Spring MVC中的@ModelAttribute
- scrollview 嵌套gridview 和 listview 会有冲突
- Spring RestTemplate关联HttpClient4.5的配置HttpClient和自身的BUG
- maven项目读取resources目录下文件