Homework_4

Part1很简单,就跟之前写DList1和2一样,按照要求,按部就班的写就行。

Part2看了眼就跳过了,比较懒。

原以为Homework_4就要这么水过,但突然发现,看不懂part3。

于是,认真的又看了一遍S&B的Chapter 8...

也真正理解,为何用newOne这个看似多余的Method来写DList。

LockDListNode是DListNode的subclass,所以,所有用来remote control DListNode的reference Variable都可以用来remote control LockDListNode,只不过这时会少了Lock这个功能特性。怎么把return得到的DListNode再转化为我们真正需要的LockDListNode呢?或者说,怎么让这些披着DListNode外衣的LockDListNode恢复它真正的功能特性呢?用class cast。

LockDListNode aNode = (LockDListNode) node;

DListNode和LockDListNode唯一的区别即是这个Lock这个特性。其他基本功能性质都一样。

其他insertFront,insertBack等method不用override的原因是,这些method都调用了newOne这个method来construct new list。所以在LockDList中,我们只需要先override newOne这个method,让它每次construct的不是DListNode而是LockDListNode。

protected DListNode newNode(Object item, DListNode prev, DListNode next) {
	return new LockDListNode(item, prev, next);
}

在最后,在override remove这个method,只需要加一个限制条件,即isLocked() is false才可以remove。

if (!aNode.isLocked())

精髓就在我着重的那句话。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值