重构改善既有代码设计--封装向下转型

封装向下转型动作

某个函数返回的对象,需要由函数调用者执行【向下转型】动作
将向下转型动作移到函数中

动机

由于「 计算对象型别」 的动作往往比较麻烦, 你还是常常需要亲自告诉编译器「 对象的确切型别」 。 向下转型在Java 特别盛行, 因为Java 没有template( 模板) 机制, 因此如果你想从群集( collection) 之中取出一个对象, 就必须进行向下转型。【常会在「 返回迭代器( iterator) 或群集( collection) 」 的函数身上发生。 】

方法

  • 找到【必须对函数调用结果进行向下转型】的地方
  • 用到一个集合(collection)或者迭代器(iterator)的函数中
  • 将向下转型动作移到该函数中

范例

Object lastReading() {
	return readings.lastElement();
}
---------------------------------
Reading lastReading() {
	// 当我拥有一个群集时, 上述那么做就很有意义
	return (Reading) readings.lastElement();
}

假如有如下代码

// 客服端代码
...
Reading lastReading = (Reading) theSite.readings().lastElement();
...
------------------------------------------------------------------
// 集群代码
Reading lastReading = theSite.lastReading();
class Site...
	Reading lastReading() {
		return (Reading) readings().lastElement();
	}
	...

在OO设计中, 继承关系代表is-a关系, 因此subclass is-a superclass , 因此正确设计之subclass 决不会破坏superclass 带来的任何契约

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值