Оптимальность переделанного паттерна Декоратор для читабельности
Я хочу написать очень понятный код в плане вызова функций, чтобы буквально/ну или почти буквально читался при объявлении функций.
Рассмотрим пример с шахматами: Мы имеем класс Figures - абстрактный От него мы продолжаем 2 класса наследника: BlackFigures и WhiteFigures. Далее мы подготавливаем общую структуру фигур и для примера(непринципиальная вещь очевидно): class King;
Проблематика и сама проблема:
Хотелось бы иметь понятную инициализацию переменной и что крайне меня волнует, наличие булевых переменных в параметрах - моветон.
Хочется иметь понятный интерфейс работы с тем, какого цвета фигуру мы хотим создать, при этом не используя булевых переменных и одновременно с этим, чтобы код читался как книга.
В коде ниже я использовал паттерн декоратор, но поскольку идейно объект состоит из небольшого количества объектов-свойств и объектов-параметров - я ужал класс декоратор сразу в BlackFigures и получил в main красивую(по-моему мнению) инициализацию переменной.
#include <QApplication>
#include <QGraphicsPixmapItem>
#include <QPixmap>
#include <QString>
#include <QBrush>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QDebug>
class Figures : public QGraphicsPixmapItem {
public:
Figures(QGraphicsItem *parent = nullptr) :
QGraphicsPixmapItem(parent) {}
virtual void draw() = 0;
};
class BlackFigures : public Figures {
public:
BlackFigures(const QPixmap pixmap, Figures* figures, QGraphicsItem *parent = nullptr)
: Figures(parent), figures(figures) {
setPixmap(pixmap);
setFlag(ItemIsMovable);
}
void draw() override { figures->draw(); }
private:
Figures* figures;
};
class BOSHKI : public Figures {
public:
BOSHKI() : Figures() {
}
void draw() override {
setPos(QPointF(50, 50));
}
};
int main(int argc, char **argv){
QApplication app(argc, argv);
QGraphicsScene scene;
scene.setSceneRect(0, 0, 600, 600);
//все ради такой легкочитаемой строчки
const QPixmap boshka = QPixmap(":/new/prefix1/bB.png");
Figures* figures = new BlackFigures(boshka, new BOSHKI);
scene.addItem(figures);
QGraphicsView view;
view.setSceneRect(0, 0, 600, 600);
view.setScene(&scene);
view.show();
return app.exec();
}
Вопрос: насколько оптимально такое решение или все таки лучше писать обычные скучные функции, как первокурсники лабы? Если код вам непонятен с первого раза, значит у вас проблемы с виртуальными таблицами и паттернами(хотя мне кажется, что моим решением я убил паттерн декоратора, но хотя бы за класс BOSHKI можно плюсик в вопрос закинуть).