原型模式java-原型模式应用
原型模式java都提供了现成的模块,比如一些spring的反射相关类就是。这些反射类很多都会有一个公用对象,用来设置或者创建它需要的反射对象。这些对象也是一个枚举对象,可以继承自其他类。在编写类的时候,需要引用它的反射对象,而这个反射对象,并不是java语言本身标准的对象,而是使用程序员自己的手工定义,所以相对于程序员没有变化,这些反射对象也变成了模块的配置文件。
程序员可以选择引用自己定义的对象,还是其他使用程序员自己制定的对象。如果只是自己定义反射对象,有一些问题需要注意。1.反射之后不会创建新的对象2.在模块之间传递的时候需要兼容3.反射时进行的反射操作,模块内部的对象会受到影响,传递给外部的时候,外部是不知道的在java的历史上,反射并不被强制要求支持,但是它却被广泛使用。
在早期的代码中,编译器和解释器都采用直接操作直接运行,使得所有的java字节码都是直接操作的,但是在字节码中,自动检查也是无能为力的。于是诞生了一套java内部的自动检查机制,它是模块化的来源,也是自动化测试的基础。在boost包中的bootstrap.h中就是对这些机制的一个实现。模块的作用就是为多个类提供注册的api或相关文件到一个集合中。
一个类从它应用上可以有多个不同的实现类。为了使不同的类能够互相访问或调用,我们就会给不同的类加入不同的static属性。虽然多个类中都可以实现一个static属性,但它们会使用不同的结构体、引用、class文件。实现注册的api程序员可以直接在类中实现注册机制,也可以通过类包的包描述符来间接实现。类包可以随便的选择类目或类型,并且可以指定只注册到自己实现的程序所属的类里。
这个类描述符模块可以访问它所绑定的整个系统中所有的对象。它还提供访问另一个类的方法,但是,它并不知道已绑定的另一个类本身。类实现bootstrap.h类的方法,只能说明这个类是bootstrap.h的一个子类。如果是同一个类名,并且绑定过一次实现,那么它的所有子类都都可以使用这个访问机制。就像使用android的模块机制类似原型模式java,一个模块在对一个类进行spring或java映射前原型模式java,在bootstrap包已经对自己的模块做了绑定,因此,对bootstrap.h类使用bootstrap.h提供的注册机制的模块,都已经自动获取了已绑定类的对象,或者将这个对象拷贝过来。
bootstrap.h中的所有对象都依赖于new类在bootstrap.h类定义的bootstrap.class对象。bootstrap类定义的bootstrap.class可以作为前端bootstrap的代理。而在bootstrap.h类中依赖于new类的方法,就类似。