Как изменить значения независимо развертываемых классов при использовании шаблона абстрактной фабрики? - PullRequest
0 голосов
/ 19 января 2020

В настоящее время я пытаюсь изучить некоторые шаблоны проектирования и привел пример для заводского шаблона, который можно развернуть независимо.

Моя проблема сейчас в том, что если я хочу изменить какие-либо значения прямоугольника, я бы создал зависимость от класса 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);
    }
}
...