设计封装

时间:2012-02-02 02:08:34

标签: coding-style encapsulation

我有一个Office业务对象,它有一个officeId实例。

从业务角度来看,办公室ID可以有500个不同的值。

officeId = 1表示它位于洛杉矶 officeId = 2表示它位于SFO等等

我想检查办公室是用于LA还是SFO

我可以使用isOfficeInLosAngeles,isOfficeInSfo等方法

我可以将此视为在Office中封装数据和行为的一种方式。

但我担心的是,我必须添加500个*方法才能找到办公室。

有没有办法在某处提取这些*方法来简化设计并仍然保持封装?

2 个答案:

答案 0 :(得分:1)

设计一个包含500个值的枚举,每个城市一个。然后,提供一个getCity方法,将城市作为枚举值之一返回。然后你的(Java语言)检查变为

City c = office.getCity();
if (c == City.LA) {
    // Do something
} else if (c == City.SFO) {
    // Do something
}

答案 1 :(得分:0)

封装是正确的......以这种方式思考,在你的代码中应该将“1意味着LA,2意味着SFO ......”的“知识”封装起来?如果您的office对象是唯一需要知道ID含义的对象,那么您可以公开一个方法getOfficeLocation,它返回一个有用的表示,比如StringOffice的调用者即使您将新位置添加到Office对象的更高版本,对象也可以使用,知道接口不会更改。