prototype设计模式 学习笔记

本文探讨了一种编程需求,即父类如何在未知子类的情况下,通过一个原型对象来创建子类实例。子类需要包含一个静态对象作为原型,并提供私有构造函数和公共的clone方法。这种设计允许框架根据存储的原型来复制子类对象,即使在子类名称未知的情况下。虽然这增加了子类的负担,但为了满足框架需求,这样的设计是必要的。
摘要由CSDN通过智能技术生成

需求:“我”(父类)现在要去创建未来的class对象(子类),但是我并不知道子类的类名、情况,因为他是在未来被创建的。

让父类有一个子类的备份(原型),并且可以通过这个原型来进行创建子类对象。

==================================================================================

康康子类吧:

我们在这个子类里面安插一个静态的对象(LSAT)(下划线表示静态)

注意我们这里面的构造函数也是私有的,但是仍然可以在类里面创建自己。

然后再把这个对象(原型)挂到父类去,让父类看得到。

然后你们子类还需要准备一个clone函数,用来(拷贝)复制原型创建该子类的对象

这样的话这个框架(基类)就可以根据你上传的这个对象(原型)去clone来制造副本

如果基类没有储存该子类的一个原型就没有办法通过对象去调用函数。

思考:就算没有原型,那我把这个clone设置成静态函数,那不也可以直接用类名去调用嘛?

但是你忽略了一个前提,你不知道未来三年五年新的class的名字。

源码:

子类:

为什莫子类需要两种构造函数呢?

第一个构造函数是为了把静态原型放入框架

第二个构造函数是为了clone初始化。注意构造函数是不能放入public的,我们就是要进行封装。

但是clone()是需要public的,不然没法通过对象来进行调用!

那么我们就加一个参数来区分把,虽然参数并没有使用到(仅仅用来区分构造函数而设计的一个参数)。

这样一来,父类就可以根据自己储存的一个个原型来进行复制子类对象了!

=====================================================================================

反省一下:

那么这样的话子类是不是就带着一种任务一种开销呢?

本来子类是自由自在地写下去,但是现在这个框架告诉我需要写一个静态函数,需要有clone,需要上传对象。

确实合理,为了满足需求,搭配框架,必须要作出些让步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值