ATM卡的OO类设计

时间:2017-03-29 14:57:02

标签: java encapsulation solid-principles

我必须为ATM卡设计一个具有以下属性的类:

  1. 持卡人姓名
  2. 卡号
  3. 除了getter和setter之外,我还有一种验证ATM引脚的方法。根据封装原则,与ATM相关的所有方法都应该是ATM类的一部分。

    但是以后我们需要改变validate方法的业务逻辑。我们不应该按照Open-Closed原则修改类,并且扩展类并创建一个新类将使我从整个项目中更改ATM类的实例化。

    一种方法是有一个工厂模式,它给我ATM对象,稍后当我扩展类时,我会将ATM对象更改为NewATM对象。

    现在我对这个问题有以下问题:

    1. 验证方法应该是ATM类的一部分吗?
    2. 还有其他方法可以解决问题吗?

1 个答案:

答案 0 :(得分:0)

卡兰, 我不太了解Java,但这就是我用SOLID做的方式:

interface IAtmCard 
{
    string CardholderName { get; set; }
    string CardNumber { get; set; }
}

interface IPin
{
    string Pin { get; set; }
}

class AtmCard : IPin, IAtmCard
{
    // Implement IAtmCard
    public string CardholderName { get; set; }
    public string CardNumber { get; set; }
    // Implement IPin
    public string Pin { get; set; }
}

static class ATM
{
    // This way the ValidatePin function only depends on the IPin interface
    public static bool ValidatePin(IPin card, string providedPin)
    {
        return card.Pin == providedPin;
    }
}

我认为实际的ATM卡与ATM逻辑本身是完全独立的对象。 ATM卡不应负责存储信息和验证信息。