Требуется разработать Индикатор выбранного процесса, например время до дедлайна, настроения, заполнения и пр.
Их можно cоставить из "готовых" объектов Shape и инициализировать различными значениями как для изменения их внешнего представления, так и загрузки отражаемых параметров.
Хорошим решением этой задачи является использование паттерна Строитель.
1. Разработайте собственный пользовательский интерфейс для отображения процесса (индикатор), например, таймер устанавливается в заданное время или отражает текущее измерение
на основе имеющихся графических объектов типа Rectangle, Circle, Line и пр. унаследованных от класса Shape javaFX
2. Создайте класс Индикатор, агрегирующий эти объекта на панели
Например,
public class Indicator {
private Pane panel = new Pane();
public void add(Pane pane){
panel.getChildren().add(pane);
}
public void show(Pane pane){
pane.getChildren().add(panel);
}
3. Объявите интерфейс для построения Идикатора
public interface Builder {
public void setView(int N, char norm, char select);
public void lineBounds(float start, float stop);
public void linePaint(float mesuare);
public void lineMark(String mesuare);
public void addTitle(String name);
public Indicator build();
}
4. Создайте реализации Builder для создания всех частей индикатора
Indicator indicator = new Indicator();
private float start, stop;
private int ktemp=0;
@Override
public void setView(int N, char norm, char select) {
indicator.setLenght(N);
indicator.setPaint(norm);
indicator.setMetka(select);
}
@Override
public void lineBounds(float start, float stop) {
this.start=start;
this.stop=stop;
FlowPane pane = new FlowPane();
Text text = new Text (""+start);
Line line = new Line();
line.setStartX(5).setStartY(5).line.setEndX(100).line.setEndY(5);
Text text1 = new Text (""+stop);
pane.getChildren().add(text);
pane.getChildren().add(line);
pane.getChildren().add(text1);
indicator.add(pane);
}
@Override
public void linePaint(float mesuare) {
AnchorPane pane =new AnchorPane();
double x =pane.getWidth()*mesuare/(stop-start);
Arc arc = new Arc();
arc.setFill(Color.RED);
arc.setCenterX(x).setCenterY(10).setRadiusX(20).setRadiusY(25).setLength(100).setStartAngle(30);
pane.getChildren().add(arc);
indicator.add(pane);
}
Обязательный метод, возвращающий построенный объект
public Indicator build() {
return indicator;
}
5. Создайте класс Director для управления Строителями или создайте метод construct() в Controller (параметры будут доступны)
public class Director {
public Indicator construct(Builder builder) {
Builder builder =new BuilderIndicatorMini();
builder.lineBounds(22.2f, 26.1f);
builder.linePaint(22.4);
builder.lineMark(String.format("%.1f", 22.4));
builder.addTitle("Норма");
Indicator indicator = builder.build();
indicator.show();
}
6. В классе Controller графического интерфейса пользователя реализуйте создание разных видов индикатор, путем задания параметров и последовательности.
7*. Реализуйте дополнительные функции :
задание стартового и конечного значения для запуска Индикатора для разных типов данных int, float, Date.
добаление дополнительных элементов - Шкала, метка, название
8. Оцените, насколько эффективно использование отдельных классов реализации Builder, путем реализации паттерна Bloch Builder для этой же задачи
Паттерн Строитель (Builder) используется для создания новых объектов по одному и тому же процессу конструирования. Это даёт возможность использовать один и тот же алгоритм процесса строительства для получения разных видов объектов.
Интерфейс Builder объявляет шаги конструирования продуктов, общие для всех видов строителей.
ConcreteBuilder реализуют шаги конструирования, каждый по-своему. Конкретные строители могут производить объекты разного представления.
Product — создаваемый объект.
Director определяет порядок вызова строительных шагов для построения той или иной конфигурации продуктов.
Client - контекст использования паттерна.
Использования Строителя:
дает больший контроль над процессом создания объектов;
позволяет варьировать внутреннее представление объекта;
отделяет процесс конструирования объекта от его внутреннего представления
Рис. 1 - Паттерн Строитель