Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
10
Проблема LSP при добавлении нового типа хранилища
Условие задачи
В системе есть иерархия интерфейса IStorage и его реализации. Требуется ввести новый тип хранилища, при этом один из методов (Save или Read) может быть неактуален для этой реализации. Если в такой ситуации метод будет генерировать исключение, это приводит к нарушению принципа подстановки Лисков (LSP). Опишите, в чём заключается ошибка такого подхода и предложите изменения в архитектуре, позволяющие сохранить корректность LSP.
class IStorage {
public:
virtual void Save(const std::string& path) = 0;
virtual void Read(const std::string& path) = 0;
};
class FileStorage : public IStorage {
public:
void Save(const std::string& path) override;
void Read(const std::string& path) override;
};
class DatabaseStorage : public IStorage {
public:
void Save(const std::string& path) override;
void Read(const std::string& path) override;
};
class RemoteStorage : public IStorage {
public:
void Save(const std::string& path) override;
void Read(const std::string& path) override;
};