设计一个合适的班级

时间:2011-05-18 17:58:42

标签: java class class-design

我想设计一个具有2个属性的油泵.Id和capacity。现在有一个限制,油泵应该有容量< 6和> 0。 1)如下所示设计我的课程是一个好习惯吗?如果它不满足条件,则将结构中的异常抛出。 2)如果我提供了一个setter方法,它会是什么样的? 3)我应该开发一个从setCapicity实际调用的辅助方法validateCapacity吗?

public class OilPump {
        private String ID;
        private int Capacity;
        public OilPump(String id,int c)throws MyException{
            if(id.length()==6 && (c<6 && c>0)) {Capacity=c;ID=id;}
            else{
                throw new MyException("Invalid OilpumpID or Capacity");
                //System.out.println("Invalid OilpumpID");
            }
        }
        void start()
        {
            System.out.println("Oil Pump is  started");
        }
        void stop()
        {
            System.out.println("Oil Pump is Stopped");
        }

    }

4 个答案:

答案 0 :(得分:0)

看起来很好。你有私人领域和公共方法,这是对的。我要指出的唯一事情是:

1)java惯例适用于camelCasing,因此您的字段应为idcapacity
2)现在你的类是不可变的(即它中的数据不能改变)。如果你想要,那很好,但是如果想要能够修改容量,你应该添加java-bean风格的setter和getter。

答案 1 :(得分:0)

1)构造函数不应该抛出异常(请记住,允许用户继续执行导致异常的步骤是不好的做法:考虑数据合同); 2)你可以为你的setter使用SetCapacity(Int32); 3)是的,为特定功能创建单独的方法是OO设计的目标;

希望它有所帮助, --KRG

答案 2 :(得分:0)

您应该使用小写启动变量/字段。

虽然你所拥有的没有错,但如果在参数错误时抛出未经检查的异常IllegalArgumentException而不是自定义的已检查异常,则会使类使用更简单。然后你应该提供适当的javadoc来定义可接受的参数。

除非您希望该类是可变的,否则不需要setter / getter。

如果您的验证仍然是微不足道的话,我不打算使用验证方法,但如果它变得更复杂,我会这样做。无论如何,这样做肯定没有任何问题。

如果需要预先测试和失败也是典型的,然后只需在if块之外执行其余代码。

if ((newId != null) || (newId.length() != 6) || (newCapacity > 6) || (newCapacity < 0))
{
    throw new IllegalArgumentException("Valid values must be ...");
}
id = newId;
capacity = newCapacity;

答案 3 :(得分:0)

也许是个人风格的问题,但我会创建一个封装验证并使构造函数为私有的工厂方法。如果将来需要,那么在层次结构中使用OilPump类更容易。课程将是这样的:

public class OilPump {
    private String id;
    private int capacity;


    public static OilPump create(String id, int capacity) {

        if(id.length()==6 && (c<6 && c>0)) {
              return new OilPump(id,capacity;
        }
        else{
            throw new IllegalArgumentException ("Invalid OilpumpID or Capacity");
        }
    }

    private OilPump(String id,int capacity) {
        this.capacity=capacity;
        this.id=id;
    }

    void start()
    {
        System.out.println("Oil Pump is  started");
    }
    void stop()
    {
        System.out.println("Oil Pump is Stopped");
    }

}
相关问题