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



要理解这个问题,你需要知道以下几点:

  1. 我想连接一个名为SCL的类到一个名为Region的类。
  2. 现在我有很多不同的方式来连接的实例
  3. 这是Java编写的
  4. 没有使用全局变量

所以我可以创建几个类(大约9个),利用多态性,但每个类只有一个方法称为连接(…)与许多不同的参数列表。我想这叫做函子类。

例如,类"SCLToRegionOverlapCircleConnect"将有一个连接方法,看起来像

public void connect(SCL scl, Region region, int radius, int overlapPercentage) {...} 

而类"RegionToRegionNonOverlapSquareConnect"将有一个连接方法,看起来像

public void connect(Region bottomRegion, Region topRegion, int sideLength) {...}

我可以只做一个叫做ConnectionTypes的类,并且有9个不同的方法,每个方法有不同的方法签名。

每种实现的优缺点是什么?谢谢!

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

另一个想法是,将SCL类连接到一个区域的行为是否真的是SCL类的方法,或者它应该在其他地方?

我建议你使用第二种。

  1. 类更少,因此项目比其他方式更清晰。
  2. 你不需要移动9类当你想使用你的方法在另一个项目(例如),但只有一个类。
  3. 编程时,一条规则是不要重复代码;使用9个类,你必须写9乘以声明,也许要声明9乘以相同的全局变量,使用的内存比使用一个。
  4. 重载,这意味着如果你必须做一件事但在很多方面(例如,你必须打印一些对象,和Result将是一个字符串,但是您需要为一个类型的对象,等等,你可以用这个技巧)你可以写9个方法,名称相同,输出相同,但输入不同。
  5. inheritance:如果你想创建一个类来继承这些方法时,你必须只使用一个类,因为java不支持多重继承。

我看不到任何缺点,除了你必须重新初始化全局变量以避免问题。

让我把两件事说清楚:

  • 你想的是命令模式,而不是函子模式。不同的是,后者也有一个方法来检索返回值,但你的connect方法是无效的。Functor模式不会对每个connect方法有不同的签名;相反,每个具体类都有专门的参数设置器(特定于您想要连接的特定方式)和相同的无参数public void connect()方法。后者将是在通用Connect超类型中声明的唯一方法。

如果你想的话,我可以加入一些示例代码。

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

缺点:你将有更多的代码,并且封装纯功能会大大降低代码的可理解性。

相关内容

最新更新