c# - 哪种设计最适合这种情况?

标签 c# design-patterns interface abstract-class

谁能告诉我哪种设计最适合这种情况?

我有名为 BasicAccountSavingAccountCurrentAccount 的类。

SavingAccountCurrentAccount 应该具有 BasicAccount 的所有功能。稍后我们可能会引入一个名为 AdvanceAccount 的新帐户,它应该具有 CurrentAccountSavingAccount 的所有功能。结构应该怎么设计?

我的回答:

  • BasicAccount 保持抽象,SavingAccount 也是抽象的,并实现 BasicAccount

  • 创建一个接口(interface) ICurrentAccount 和 currentaccount 实现 BasicAccountICurrentAccount,

  • 如果我们有 AdvanceAccount,则使用 SavingAccountICurrentAccount 实现它。

有没有更好的办法?这是在面试中被问到的,我想面试官对我的回答不满意。

最佳答案

我会使用这样的东西:

abstract class BasicAccount {}

interface ISavingAccount {}
interface ICurrentAccount {}

class SavingAccount : BasicAccount, ISavingAccount {}  
class CurrentAccount : BasicAccount, ICurrentAccount {}  
class AdvanceAccount : BasicAccount, ISavingAccount, ICurrentAccount {}  

如果SavingAccountCurrentAccount有很多功能,可以在AdvanceAccount实现中使用聚合:

class AdvanceAccount : BasicAccount, ISavingAccount, ICurrentAccount 
{
    private readonly SavingAccount savingAccount;
    private readonly CurrentAccount currentAccount;

    public AdvanceAccount()
    {
        savingAccount = new SavingAccount(...);
        currentAccount = new CurrentAccount(...);
    }

    // redirect ISavingAccount and ICurrentAccount implemetation
    // to savingAccount and currentAccount respectively
}  

UPD
请注意,在 AdvanceAccount 中直接实例化 SavingAccountCurrentAccount 只是一个示例。 IRL 你可能会使用 IoC 容器。

关于c# - 哪种设计最适合这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33031344/

相关文章:

c# - 并行处理期间的值存储

c# - 处理您的请求时发生错误。请求 ID : 0HLEALBF2I2PS:00000007

java - 我怎样才能避免将顶级组件的单个实例传递给我的所有子类

c++ - 单例和全局变量的区别

java - 工厂方法如何返回接口(interface)和抽象类的实例?

c# - 当前不会命中断点。处理 <file> 时出现意外的符号读取器错误(服务器端符号)

c# - 如何自动创建一个与 Access 表兼容的类?

c++ - Inheriting (or member) traits 成语

java - 在另一个默认方法中从其他接口(interface)调用默认方法

c# - 如何处理 TDD 中的接口(interface)过度使用?