(Has-A vs. Is-A)如何布局我的程序架构? (JAVA)

我有三个组成部分:

>界面:类别
>父类:MainCategory
>子类:子类别

我知道:

> MainCategory IS-A类别
> MainCategory Has-A SubCategory
>子类别IS-A类别

但是,当我尝试使用extends和implements在我的代码中构造它们时,我有点困惑.以下是我到目前为止的情况,请告诉我这是否有意义或是否应以其他方式完成?谢谢.

public interface Category{}
public class MainCategory implements Category{}
public class SubCategory extends MainCategory implements Category {}

我想知道我是否正确地思考它.此外,每个MainCategory将包含多个子类别,因此使用扩展是正确的还是不意味着聚合?谢谢.

解决方法:

根据你提到的内容:

> MainCategory IS-A类别
> MainCategory Has-A SubCategory
>子类别IS-A类别

SubCategory不应继承MainCategory.它应该只是实现Category接口.如果SubCategory和MainCategory之间有很多共同的代码,我怀疑你会这样,那么我可以建议另一种布局:

class Category {
    private List<SubCategory> children = new ArrayList<SubCategory>();

    public List<SubCategory> getSubCategories() {
        return children;
    }

    public void addSubCategory(SubCategory child) {
        child.setParent(this);
        children.add(child);
    }

    public Category getParent() {
        return null;
    }
}

class SubCategory extends Category {
    private Category parent = null;

    public Category getParent() {
        return parent;
    }

    public void setParent(Category parent) {
        this.parent = parent;
    }
}

任何类别都可能有SubCategory,但只有SubCategory可以有父类.请注意,Category不是抽象类.我的想法是可以直接实例化类别.它将是您的SubCategory类中的大多数逻辑的根类别和基础. SubCategory可以覆盖特定于SubCategory的任何行为.如果你发现你必须在SubCategory中重载很多行为,那么将Category作为一个抽象类并改为创建一个MainCategory,但我怀疑这不是你的情况.

希望有所帮助!

上一篇:使用super();在Java中


下一篇:几个枚举如何扩展包含Java中这些枚举所用方法的类?