Java中的工厂,具体对象采取不同的构造参数

我试图在Java中实现一个工厂模式。 我有一个叫圆形和三angular形的类。 问题是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); } } 

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

谢谢!

你有两个select:

1) 抽象工厂 :

RectangularShape extends Shape

RoundShape extends Shape

RectangularShapeFactoryRoundShapeFactory

2) Builder (另请参阅Effective 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(); 

你想做什么是根本不可能的。 如果构造函数的参数不同,那么客户端代码将不得不为Circle执行与Square不同的工作,并且不能用统一代码解决这个问题。 如果除了处理你认为应该在工厂中发生的构造参数外,工厂还在做其他工作,那么你需要将这个问题发布到你的问题上,并陈述你在分解这个通用代码工作时遇到的困难。

所有的实现必须采用相同数量的参数。 你有select

  • 有工厂存储的额外的参数,所以你只需要提供中心为例。
  • 即使有些工厂可能会忽视其中的一些,工厂也会采取一切论据。
  • 有一个参数可变长度。 例如“双重”,这个问题是调用者需要知道工厂需要什么来挫败工厂的目的。 恕我直言。