class Product<T>{
String name;
T category;
}
与下面的设计相比,哪一个更好,如何在不同的情况下选择哪一个?我认为它们在功能方面是相同或非常相似的。
class Product{
String name;
Category category;
}
interface Category {
String type();
}
class C1 implements Category{
...
@Override
String type(){
...
}
}
class C2 implements Category{
...
@Override
String type(){
...
}
}
答案 0 :(得分:1)
你能做到的第三种方式,我个人会选择:
interface Product
{
public String getName();
public String getCategory();
}
class Shirt implements Product
{
@Override
public String getName()
{
return "Shirt";
}
@Override
public String getCategory()
{
return "Clothing";
}
}
我建议这样做的原因是你可能会有不同类型的产品,例如:衬衫,牛仔裤,内衣,一瓶牛奶。这些可能与is a
有Product
的关系,即衬衫是产品,一瓶牛奶是产品。这表明Shirt
将从某个基类Product
类继承:
class Product
{
String name;
String category;
}
或者,它将实现Product
接口:
interface Product
{
public String getName();
public String getCategory();
}
这两种方式都有效,我更喜欢界面,因为它不会限制你到单亲。现在,每件产品都可以具有更多特定属性 - 例如,衬衫将具有一定的尺寸,而一瓶牛奶将具有一定的体积:
class MilkBottle implements Product
{
int volume;
@Override
public String getName()
{
return "Milk (" + volume + "ml)";
}
@Override
public String getCategory()
{
return "Grocery";
}
}
哪一个更好,如何选择在不同情况下?
在编码方面,证明一种解决方案比另一种解决方案更好是非常困难的,如果不是不可能的话。这是一个你必须做出的判断,并且随着经验你会变得更好。话虽这么说,你应该经常考虑两件事:
开始实施您的解决方案的小型模型,并亲自了解您认为哪个更好。实例化产品是否容易?或者对课程进行单元测试? 3个月后,当您决定添加新产品时呢?
我希望将来能帮到你。