2012-02-02 49 views
0

我有一个具有officeId实例的Office业务对象。封装设计

在企业的角度,办公IDS可以有500个不同的值。

officeId = 1意味着它位于LA officeId = 2意味着它位于SFO等

我要检查,如果办公室为LA或SFO

我可以有这样的方法作为isOfficeInLosAngeles,isOfficeInSfo等

我可以看到这样的一种方式来封装办公室的数据和行为。

但我关心的是,我将不得不增加500 *方法找出的办公室。

有什么办法来提取这些是*方法某处,以简化设计,并仍然保持封装?

回答

1

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

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

封装是正确的......想起来这样,凡在你的代码应该“知识”,即“1表示LA,2表示SFO ...”是封装?如果你的办公室对象是需要知道什么ID是指唯一对象,那么你可以公开的方法getOfficeLocation返回有用表示,说String,该Office对象的调用者可以使用,明知界面不会改变即使您将新位置添加到更高版本的Office对象中。