【问题标题】:one to one relationship between classes in javajava中类之间的一对一关系
【发布时间】:2015-03-03 09:21:27
【问题描述】:

我必须在 Java SE 中实现以下类,但我不知道如何实现 ATMCard 和 Account 之间的一对一关系。我已经研究过(可能使用了错误的关键字)但找不到任何东西。提前谢谢你..

【问题讨论】:

  • 我认为这是家庭作业,如果是这样,请将其标记为这样。还请说明您尝试过的内容 - 大概您已经创建了 ATMCard 类。鉴于ATMCardCustNameaccountNo 都具有一对一的关系,因此看看如何将关系添加到Account 应该不是想象中的巨大飞跃。如果你仍然不确定,你真的最好和你的导师讨论,而不是在这里发帖希望得到答案。
  • 其实这不是作业,而是我的硕士论文的一部分,我不是想从别人那里找到源代码,而是学习它的逻辑,这是本站的目的还是?顺便说一句,谢谢你的回答。

标签: java class relationship


【解决方案1】:

首先,我发现ATMCardAccount 的模型有点奇怪:

  • PIN 不是与ATMCard 相关,而不是与Account 相关吗?
  • custName 不是与Account 相关吗?

那么,1-1 关系意味着您将拥有以下之一:

  • Account 类有一个ATMCard 类型的成员
  • ATMCard 类有一个Account 类型的成员
  • 以上两种关系。
  • 以上都不是,但 getter 将根据 ID 获取相关实体。例如,您可以有一个ATMCard$getAccount(),它将根据accountNo 检索相关的Account

这真的取决于你需要的模型逻辑。

正如@NickHolt 建议的那样,我会选择一种可以通过工厂初始化的单向关系,例如

public static ATMCard createCard(String name, int accNo, int pin, int initBal) {
   Account acc = new Account(name, accNo, initBal);
   ATMCard card = new ATMCard(pin);
   card.setAccount(acc);
   return card; 
}

您可以保护 ATMCardAccount 构造函数以强制使用公共工厂方法。

注意:您可以使用SpringGuice这样的框架来提供这种工厂注入服务。

【讨论】:

    【解决方案2】:

    要在ATMCardAccount 之间创建一对一的关系,您必须在ATMCard 类中创建Account 实例。

    【讨论】:

    • 为了成功这种双向的关系,我应该在Account中创建ATMCard实例,同时在ATMCard中创建Account实例吗?
    • 你不能两者都做(在卡片中创建帐户实例相反)。最灵活的当然是有一个卡片工厂,它将通过受保护的构造函数创建两个对象,并通过受保护的设置器设置关系。通过这种方式,您可以强制两个对象之间的强关系。
    • 应该避免两种方式的关系,这会使模型变得脆弱。 Account 知道 ATMCard 有什么好处?只需创建 Account 在创建时将其注入到 ATMCard 中,使关系从 ATMCard 工作到 Account 即可完成。
    • @atishshimpi 是的,但不要在ATMCard 中创建Account,通过构造函数注入一个
    【解决方案3】:

    我认为这是ATM 不需要与ATMCardAccount 相关。想想你的银行ATMCard被其他银行的ATM使用会发生什么?或者你的银行不允许ATMCard在其他银行使用ATM

    这些应该是 ATM 取款操作的一部分。

    你可以有一个从AccountATMCard的双向关系

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2018-03-26
      • 1970-01-01
      相关资源
      最近更新 更多