需求:“我”(父类)现在要去创建未来的class对象(子类),但是我并不知道子类的类名、情况,因为他是在未来被创建的。
让父类有一个子类的备份(原型),并且可以通过这个原型来进行创建子类对象。
==================================================================================
康康子类吧:
我们在这个子类里面安插一个静态的对象(LSAT)(下划线表示静态)
注意我们这里面的构造函数也是私有的,但是仍然可以在类里面创建自己。
然后再把这个对象(原型)挂到父类去,让父类看得到。
然后你们子类还需要准备一个clone函数,用来(拷贝)复制原型创建该子类的对象。
这样的话这个框架(基类)就可以根据你上传的这个对象(原型)去clone来制造副本。
如果基类没有储存该子类的一个原型就没有办法通过对象去调用函数。
思考:就算没有原型,那我把这个clone设置成静态函数,那不也可以直接用类名去调用嘛?
但是你忽略了一个前提,你不知道未来三年五年新的class的名字。
源码:
子类:
为什莫子类需要两种构造函数呢?
第一个构造函数是为了把静态原型放入框架
第二个构造函数是为了clone初始化。注意构造函数是不能放入public的,我们就是要进行封装。
但是clone()是需要public的,不然没法通过对象来进行调用!
那么我们就加一个参数来区分把,虽然参数并没有使用到(仅仅用来区分构造函数而设计的一个参数)。
这样一来,父类就可以根据自己储存的一个个原型来进行复制子类对象了!
=====================================================================================
反省一下:
那么这样的话子类是不是就带着一种任务一种开销呢?
本来子类是自由自在地写下去,但是现在这个框架告诉我需要写一个静态函数,需要有clone,需要上传对象。
确实合理,为了满足需求,搭配框架,必须要作出些让步。