【发布时间】:2014-01-22 19:06:15
【问题描述】:
我对编程并不陌生,但对 OOP 相对较新,所以我有一个设计问题。实际上,我有两个问题包含在同一个问题中。
为了简单起见,假设我正在设计一个FruitBasket 类。除了FruitBasket 类,我还将设计一个Apple 类、一个Orange 类和一个Pear 类。每当我实例化一个FruitBasket 类型的对象时,它都会自动实例化这些其他类的has-a 关系。
class Apple { //Apple implementation here }
class Orange { //Orange implementation here }
class Pear { //Pear implementation here }
class FruitBasket
{
Apple _apple;
Orange _orange;
Pear _pear;
public FruitBasket()
{
_apple = new Apple();
_orange = new Orange();
_pear = new Pear();
}
}
class Program
{
FruitBasket _fruitBasket;
static void Main()
{
_fruitBasket = new FruitBasket();
}
}
好的,下面是我的问题:
- 在
FruitBasket构造函数中实例化各种水果对象是否可以接受,如图所示,还是这种做法不好? - 如果每个水果篮都包含所有三种水果,这种方法似乎很好,但是,如果我希望实例化只有
Apple和Orange的水果篮怎么办?Pear和Orange?Apple和Pear?等等。最好的方法是什么?
创建一个FruitBasket 类来声明可能进入篮子的每个水果并传递一些参数告诉FruitBasket 类要实例化哪些水果类会更好吗?
我真的不知道什么是最有效的,或者我的想法是否在球场上。
【问题讨论】:
-
这可能是Software Engineering的一个更好的问题
-
如果我们有新的水果类芒果会有什么影响,您需要在哪里进行更改?
-
如果您希望您的代码是可测试的,您应该通过构造函数参数传递您的类的实例(或通过属性链接它们),而不是直接在其中创建具体类。就像现在一样,它们不可模拟。
标签: c# class oop constructor