当前位置: 首页 > 面试题库 >

当具体对象采用不同的构造函数参数时,在Java中为工厂

陶文林
2023-03-14
问题内容

我正在尝试在Java中实现Factory模式。我有一个名为Shape的类,该类由Circle和Triangle扩展。问题在于Shape构造函数仅获取2个参数,而Circle则获取3个参数,Triangle也是如此(由于与Circle相同,因此我不会在代码部分中显示)。为了更好地演示它:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }

任何想法如何克服这个问题?我一定不能从工厂内部接收用户的输入(必须从外部接收)。

谢谢!


问题答案:

您有两种选择:

1)抽象工厂:

RectangularShape extends Shape

RoundShape extends Shape

RectangularShapeFactoryRoundShapeFactory

2)构建器(另请参见有效Java中的第2项)

public Shape {
    private final int x;
    private final int y;
    private final double radius;

    private Shape(Builder builder) {
        x = builder.x;
        y = builder.y;
        radius = builder.radius;
    }

    public static class Builder {
        private final int x;
        private final int y;
        private double radius;

        public Builder(int x, int y) {
            this.x = x;
            this.y = y;
        }

        public Builder radius(double radius) {
            this.radius = radius;
            return this;
        }

        public Shape build() {
            return new Shape(this);
        }    
    }
}

//in client code

    Shape rectangle = new Shape.Builder(x,y).build();
    Shape circle = new Shape.Builder(x,y).radius(radiusValue).build();


 类似资料:
  • 我在创建对象和参数化构造函数时遇到以下错误。 Main.java: 6:错误:构造函数Cipher类中的Cipher不能应用于给定类型 必需:无参数 找到:int 原因:实际参数列表和正式参数列表的长度不同 这是我的文件的样子

  • 问题内容: 我有这个类的构造函数: 问题是,我想创建此类的数组,如何对其进行初始化? 不起作用。 更新 我需要做这样的事情吗? 然后初始化每个对象? 问题答案: 在创建数组时,您正在创建类别数组。那是数组的一个实例。 当用Category对象填充数组时,此时将使用带有Const的Category。

  • 我有以下课程布局: 我正在为服务创建一个单元测试,但我想将ServiceHelper用作一个“活动”类,但要模拟ServiceHelper中的构造函数参数。有没有办法通过Mockito实现这一点?

  • 对于我的Java应用程序,我尝试使用ScalaCheck编写一些基于属性的单元测试。为此,我需要生成器,但我能找到的所有教程都使用带有参数的构造函数来生成对象。我需要生成的对象没有构造函数参数,我无法添加这样的构造函数,因为它来自外部库。 我现在有以下内容(Jwt声明来自软件包组织.jose4j.jwt): 关于如何编写我的生成器,有什么建议吗?我对Scala一无所知,所以如果我犯了一个“明显”的

  • 在Dart中,工厂构造函数需要编码器提供更多逻辑,但与常量构造函数没有太大区别,只是它们允许“非最终”实例变量。 与const Constructor相比,它们有哪些优点? 谢谢大家。 编辑 下面是关于Seth Ladd博客“Dart-试图理解“工厂”构造函数的价值”中工厂构造函数的用法。 恕我直言,使用通用构造函数,可以通过细微的差异实现相同的效果,但相当简单。 如上所示,尽管这两个实例 所以,

  • 当Java中给出参数构造函数时,为什么默认的无参数构造函数会失败? 这个设计有什么意义? 例如: