Оптимальность переделанного паттерна Декоратор для читабельности

Я хочу написать очень понятный код в плане вызова функций, чтобы буквально/ну или почти буквально читался при объявлении функций.

Рассмотрим пример с шахматами: Мы имеем класс Figures - абстрактный От него мы продолжаем 2 класса наследника: BlackFigures и WhiteFigures. Далее мы подготавливаем общую структуру фигур и для примера(непринципиальная вещь очевидно): class King;


Проблематика и сама проблема:

  1. Хотелось бы иметь понятную инициализацию переменной и что крайне меня волнует, наличие булевых переменных в параметрах - моветон.

  2. Хочется иметь понятный интерфейс работы с тем, какого цвета фигуру мы хотим создать, при этом не используя булевых переменных и одновременно с этим, чтобы код читался как книга.


В коде ниже я использовал паттерн декоратор, но поскольку идейно объект состоит из небольшого количества объектов-свойств и объектов-параметров - я ужал класс декоратор сразу в 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 можно плюсик в вопрос закинуть).


Ответы (0 шт):