社区首页 >问答首页 >当有更多常见操作时,如何设计类?

当有更多常见操作时,如何设计类?
EN

Stack Overflow用户
提问于 2014-02-13 11:35:54
回答 3查看 57关注 0票数 0

我有以下类,表示网页

代码语言:javascript
代码运行次数:0
复制
App
Header
TableOperations

Header对所有页面都是通用的。所以我可以这样写:

代码语言:javascript
代码运行次数:0
复制
class App extends Header

TableOperations类表示与表相关的操作。所有的网页也都有一个表格,有共同的操作。现在我该如何设计这3个类呢?

现在,App如何使用这两个类和方法呢?

我不能在java中扩展两个类。还有别的办法吗?

EN

回答 3

Stack Overflow用户

发布于 2014-02-13 11:37:31

我建议使用组合,而不是使用继承,继承应该用于具有is a关系的对象。如果继续使用继承策略,您可能会构建一个大型的类层次结构,其中每个类都扩展了另一个类,这并不可取。

代码语言:javascript
代码运行次数:0
复制
class App{
    Header header = new Header();
    TableOperations operations = new TableOperations();
}
票数 3
EN

Stack Overflow用户

发布于 2014-02-13 11:38:01

Composition是你的朋友。我可能会让您的类实现它们特定的接口。然后,您可以使用多个接口继承来指定App将从您的其他2个接口实现功能。

例如:

代码语言:javascript
代码运行次数:0
复制
class Header implements IHeader
class TableOperations implements ITableOperations

class App implements IHeader, ITableOperations {
   private final IHeader header = new Header();

   // method declared in IHeader
   public void methodForHeader() {
      header.methodForHeader();
   }
}

然后,App将适当地委托底层实现HeaderTableOperations (最有可能作为成员实现)

等等。

票数 3
EN

Stack Overflow用户

发布于 2014-02-13 11:39:39

你可以使用Header使用is-a,也就是结构的一部分,对所有的层次结构都有共同的状态。还有operations has-a structure,因为operations这个名字说他只有操作,没有state。当然,这取决于您的结构和需求。

代码语言:javascript
代码运行次数:0
复制
class App extends Header {
    TableOperations ops = new TableOperations();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21753070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文