我正在尝试用 Java 实现工厂模式。
我有一个名为 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);
}
}
有什么想法如何克服这个问题?我不能接收工厂内部用户的输入(必须从外部接收)。
Thanks!
您有两个选择:
1) 抽象工厂 http://en.wikipedia.org/wiki/Abstract_factory:
RectangularShape extends Shape
RoundShape extends Shape
and RectangularShapeFactory
and RoundShapeFactory
2) Builder http://en.wikipedia.org/wiki/Builder_pattern(另请参阅《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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)