Skip to content

Instantly share code, notes, and snippets.

@qxornet
Created April 2, 2021 12:01
Show Gist options
  • Save qxornet/f538a688027cecb79c644e9bf37b36f6 to your computer and use it in GitHub Desktop.
Save qxornet/f538a688027cecb79c644e9bf37b36f6 to your computer and use it in GitHub Desktop.
Пример-демонстрация интерфейсов
#ifndef INTERFACE_H
#define INTERFACE_H
#include "code/includes/includes.h"
/**
* @brief The Subcommand abstract class
* Абстрактный класс реализующий паттерн Фабрика (Factory)
* содержит три виртуальных метода:
* 1 - установка и получение имени суб-кмоаннды,
* 2 - рабочий метод (механику работы команды)
* Является продуктом
*/
class SubCommand
{
public:
virtual ~SubCommand() {};
virtual void set(std::string_view name) abstract;
virtual std::string get() abstract;
virtual void exec() abstract;
};
/**
* @brief The Command class
* Абстрактный класс реализующий паттерн Фабрика (Factory)
* содержит три виртуальных метода:
* 1 - установка и получение имени команды
* 2 - добавление суб-команды
* Предназначен для создания суб-команд и является продуктом
*/
class Command
{
public:
virtual ~Command() {};
virtual void set(std::string_view name) abstract;
virtual std::string get() abstract;
virtual void addSub(SubCommand* subcom) abstract;
};
/**
* @brief The CommandsFactory class
* Абстрактный класс-фабрика создающий конкретные команды
* и выводящий
* конкретные команды же создают конкретные суб-команды
*/
class CommandsFactory
{
public:
virtual ~CommandsFactory() {};
virtual Command* createCommand() abstract;
virtual std::list<Command*> createCommands() abstract;
};
#endif // INTERFACE_H
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment