原型模式

xiaoxiao2021-02-28  103

定义

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

转载请注明原文地址: https://www.6miu.com/read-48716.html

最新回复(0)