对象设计构造函数与setter方法

时间:2014-01-23 02:52:19

标签: api oop

嘿,我有一个关于面向对象设计编程的一般性问题,特别是关于创建最终成为程序员然后使用的API和可扩展框架的对象/接口。让我们说我正在创建一个名为“Shoe”的对象,它有一些私有数据变量,如“品牌”,“类型”,“性别”,“大小”,“颜色”和“brand_id”

现在假设程序员想要创建一个Shoe对象。然后,我将如何为程序员设置Shoe类私有数据变量。我应该创建一个冗长的构造函数,如“Shoe(字符串品牌,字符串类型,int size,Color c,int id)”

或者我应该简化Shoe构造函数,例如“Shoe()”,然后为所有这些私有数据变量提供setter方法,例如setBrand(),setType()等。

setter方法的问题在于,如果我将此对象传递给第三方客户端甚至是另一个函数,程序员就可以设置/覆盖这些数据变量的值,使新创建的鞋子对象无用。如果有人想要传递Addidas鞋子,现在程序员可以重新编写对象为Nike并存储它。什么是最佳答案/解决方案?

1 个答案:

答案 0 :(得分:0)

我不认为这个问题有“最佳解决方案”。

恕我直言,你应该取消哪些行为(方法)是你的“鞋子”的基础并将它们放在你的界面中。例如:

public interface Shoe{
    int getSize();
    void wear();
}

Setter,getter,contructor和object state一般都是为具体类而不是接口实现细节。具体类可以通过多种方式设计,因此您无需担心这一点。

只有当接口所代表的实体具有不可识别的行为时,才能将Setter和getter放在接口中,否则你应该避免使用它们。