一个类或多态实现中的所有方法?

时间:2013-05-27 19:17:54

标签: java polymorphism implementation

以下是您需要了解的问题:

  1. 我想将一个名为SCL的类连接到一个名为Region的类。
  2. 现在我有很多不同的方法可以连接一个实例 这两个班。
  3. 写这是Java
  4. 没有使用全局变量
  5. 所以我可以创建几个利用多态的类(大约9个)但是每个类只有一个名为connect(...)的方法,它有许多不同的参数列表。我认为这被称为仿函数类。

    例如,类“SCLToRegionOverlapCircleConnect”将具有类似于

    的连接方法
    public void connect(SCL scl, Region region, int radius, int overlapPercentage) {...} 
    

    而类“RegionToRegionNonOverlapSquareConnect”将具有看起来像

    的连接方法
    public void connect(Region bottomRegion, Region topRegion, int sideLength) {...}
    

    OR

    我可以创建一个名为ConnectionTypes的类,并且只有9个不同的方法,每个方法都有不同的方法签名。

    每项实施的PRO和CON是什么?谢谢!

3 个答案:

答案 0 :(得分:0)

如果使用多态,则在实例化SCL对象时确定连接方法。那有意义吗?或者SCL课程在其生命中可以以各种不同的方式连接到该地区?在这种情况下,多态性没有意义。我们没有任何信息的一个重要方面是connect(...)方法的参数会发生什么。它们是否需要存储在SCL类中,在这种情况下,使用不同的参数,多态性可能再次有意义,以便每个类可以存储适当的参数。

另一个想法是,将SCL类连接到一个区域的行为实际上是SCL类的一个方法,还是它应该存在于其他地方?

答案 1 :(得分:0)

我建议你使用第二个。

  1. 更少的课程,因此该项目比其他方式更为突出。
  2. 当您想要使用时,您不需要移动9个课程 另一个项目中的方法(例如),但只有一个类。
  3. 编程时,一条规则不是复制代码;使用9个班级, 你必须写出9次声明,也许要宣布9次 使用相同的全局变量,使用比使用更多的内存 一。
  4. 重载,这意味着如果你必须做一件事 但是以多种方式(例如,你必须打印一些物品,而且 结果将是一个字符串,但你需要写不同的 一种类型的对象等,你可以使用这种技术)你可以写 9种方法具有相同的名称,相同的输出,但输入不同。
  5. 继承:如果你想创建一个继承那些的类 方法,你必须只使用一个类,因为java不支持 多重继承。
  6. 我看不到任何CON,除了你必须重新初始化全局变量以避免问题。

答案 2 :(得分:0)

让我说清楚两件​​事:

  • 您正在考虑Command模式,而不是Functor模式。不同之处在于后者还有一种方法来检索返回值,但您的connect方法无效。
  • Functor模式对于每个connect方法都没有不同的签名;相反,每个具体的类都有专用的参数设置器(特定于你想要连接的特定方式)和相同的无参数public void connect()方法。后者将是在公共Connect超类型中声明的唯一方法。

如果你愿意,我可以输入一些示例代码。

Pro:如果你的代码中的任何地方都可以使用Connect命令,而不需要知道你正在处理的9种方式中的哪一种,那么Command模式就是你的朋友。

Con:您将拥有更多代码,封装纯功能可能会降低代码的可理解性。