如何解决处理重复的方法头
我是编码新手,所以让我们把它排除在外。另外,我目前正在使用 Java。 我想以两种不同的方式实例化 Line 对象:
public Line(double x1,double y1,double x2,double y2){}//creates a line connecting two points
和
public Line(double x,double y,double dir,double length){}//creates a line extending off of one point
然而,根据编译器,它们都有相同的方法头。
我考虑过向第二个构造函数添加一个无用的参数,但这看起来很混乱且没有必要。有没有人对现在和将来如何处理这样的问题有什么建议?
注意:这个主题只是关于修复标题,而不是关于如何改进我的代码。谢谢!
解决方法
您可以为这两个构造函数调用创建两个不同的静态工厂方法。 根据维基百科:
工厂方法设计模式是“四人帮”之一 描述如何解决重复出现的设计问题的设计模式 设计灵活且可重用的面向对象软件,即 更易于实现、更改、测试和重用的对象。
使用工厂方法设计模式代替常规类 用于保持编程的 SOLID 原则的构造函数, 将对象的构造与对象本身解耦
工厂方法本质上是可以有不同名称(并且不必使用类的名称)和不同数量的参数甚至与前一个参数相同数量的参数的方法。你可以这样做:
public static Line createJoining(double x1,double y1,double x2,double y2){...}
public static Line createExtending(double x1,double y2){...}
那么你可以有一个这样的构造函数
public Line(double x1,double y2){}//creates a line connecting two points
在createJoining() 和createExtending() 中,你可以调用这个构造函数, 并将您不同的程序逻辑放在这两个工厂方法中。
createJoining() 和 createExtending(),必须像这样返回 Line 的新实例:
public static Line createJoining(double x1,double y2){
// program logic goes here,where you can do some calculations
return new Line(x1,y1,x2,y2);
}
public static Line createExtending(double x1,double y2){
// program logic goes here,y2);
}
使用示例,
Line joinedLine = Line.createJoining(0.1,3.5,10.5,1.0);
Line extendedLine = Line.createExtended(0.6,29.4,20.0,2.0);
More info about Factory Methods here
,另一种方法是避免相同的方法头,同时使用更有意义的参数类型:
import java.awt.geom.Point2D;
…
public Line(Point2D.Double p1,Point2D.Double p2) { … }
public Line(Point2D.Double p,double dir,double length) { … }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。