В настоящее время я пытаюсь изучить некоторые шаблоны проектирования и привел пример для заводского шаблона, который можно развернуть независимо.
Моя проблема сейчас в том, что если я хочу изменить какие-либо значения прямоугольника, я бы создал зависимость от класса Rectangle. Я мог бы поместить эти методы в интерфейс Shape, но это не имело бы особого смысла, если бы следующая добавленная мной фигура была кругом.
Как я могу изменить значения, не создавая зависимость от класса Rectangle?
Форма. java
public interface Shape {}
ShapeFactory. java
public interface ShapeFactory {
Shape create(String shape);
}
Прямоугольник. java
public class Rectangle implements Shape {
private int top, left, bottom, right;
public Rectangle(int top, int left, int bottom, int right) {
setTopLeft(top, left);
setBottomRight(bottom, right);
}
public void setTopLeft(int top, int left) {
this.top = top;
this.left = left;
}
public void setBottomRight(int bottom, int right) {
this.bottom = bottom;
this.right = right;
}
}
ShapeFactoryImpl. java
public class ShapeFactoryImpl implements ShapeFactory {
public Shape create(String shape) throws RuntimeException {
if (shape.equals("rectangle"))
return new Rectangle(0, 0, 1, 1);
throw new IllegalArgumentException();
}
}
Приложение. java
public class App {
ShapeFactory shapeFactory;
public static void main(String[] args) {
App app = new App();
app.setShapeFactory(new ShapeFactoryImpl());
Shape rectangle = app.create("rectangle");
// don't want this
((Rectangle) rectangle).setTopLeft(1,2);
((Rectangle) rectangle).setBottomRight(2,3);
}
private void setShapeFactory(ShapeFactoryImpl shapeFactory) {
this.shapeFactory = shapeFactory;
}
private Shape create(String shape) {
return shapeFactory.create(shape);
}
}