【问题标题】:Java modelling class if objects have same properties but they are fundamentally differentJava 建模类,如果对象具有相同的属性但它们根本不同
【发布时间】:2020-06-10 14:30:11
【问题描述】:

假设我必须为信用卡报告和借记卡报告建模。考虑它们都具有相同的属性,例如交易金额、交易日期、交易地点、交易 ID 和交易状态。

我应该如何在 Java 中对此进行建模?我应该创建像 Creditdebit 类这样具有上述属性的单一类并将其用于创建信用报告和借记报告吗?或者创建单独的类因为它们根本不同?我应该如何处理这种情况?帮助我处理此类情况的资源,或者是否有任何模式可以处理此类情况。

【问题讨论】:

  • 您可以同时做到这两种:创建单独的类,但创建一个接口ICardReport 和/或一个抽象类AbstractCardReport,在其中放置两个类共享的方法/字段。这样你就不会有任何重复的代码,但仍然有 2 个单独的类来表示这 2 个代表不同的用例。

标签: java design-patterns ooad


【解决方案1】:

它们有根本的不同吗?根据你的描述,听起来不像。是的,从逻辑上讲,就像你和我对信用卡和借记卡的看法一样,它们有着根本的不同。

但是您需要区分您认为的不同之处以及您实际使用它的方式以及您需要建模为不同的东西以便您的程序能够处理,因为这是两个不同的东西。有时代表您如何使用它以及您的程序将如何使用它的想法是相同的,但并非总是如此。

在您的情况下,您描述了两个名称可能不同但实际上是同一事物的事物。如果它们具有所有相同的属性,并且函数定义完全相同,那么它就是同一个类 - 为什么要写两次呢?最小化你的代码库。

也就是说,为两者创建一个单独的类也不是一件坏事。它可以帮助您以后扩展代码。

abstract class Card {
    UUID id;
    BigDecimal limit;
    BigDecimal currentAmount;
    ...
    public void charge(BigDecimal amount) {
        currentAmount = currentAmount.add(amount);
    }
    ...
}
class DebitCard extends Card {}
class CreditCard extends Card{}

所以您的Card 类包含所有逻辑,而DebitCardCreditCard 都是完全空的类,从父类Card 继承它们的所有字段和逻辑。同样,这里的优势是可扩展性。如果稍后您确定 CreditCard 需要想办法每月付款(不在您的原始描述中),那么您可以稍后添加它,而不会以任何方式对 DebitCard 产生负面影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2023-02-14
    • 2021-10-08
    • 2021-04-19
    相关资源
    最近更新 更多