Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_Otvety.docx
Скачиваний:
26
Добавлен:
07.04.2025
Размер:
2.59 Mб
Скачать

17. Архитектура Model–View–Controller (mvc) и её варианты. Самый простой способ её нарушить и исправить.

Model-View-Controller (MVC, «Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо.

  • Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние.

  • Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.

  • Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений.

17. Одинарная и двойная диспетчеризация.

15. Покажите, как с помощью паттерна Abstract Factory можно реализовать сохранение и загрузку произвольных объектов из контейнера в текстовый файл, так, что при этом сам контейнер ничего не будет знать о классах объектов, которые он создает и загружает. Предположим, что наследоваться от контейнера нельзя, поэтому Factory Method неприменим.

Абстрактная фабрика — это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.

По сути является вынесенным в отдельный класс фабричным методом.

class Food(){ public : virtual void prepare() = NULL;};

class MeatFood : public Food{ public : virtual void prepare () {printf (“prepare”);}};

class FoodFactory { public : virtual Food* createFood() = NULL;};

class MeatFoodFactory() : public FoodFactory{ public : virtual Food* createFood(){ return new MeatFood;}};

int main(){ FoodFactory * factory; factory = new MeatFoodFactory(); Food *food = factory->createFood(); }

16. Покажите, как с помощью паттерна Factory Method можно реализовать сохранение и загрузку произвольных объектов из контейнера в текстовый файл, так, что при этом сам контейнер ничего не будет знать о классах объектов, которые он создает и загружает.

Фабричный метод — это порождающий паттерн проектирования, который решает проблему создания различных продуктов, без указания конкретных классов продуктов.

  1. class Product {

  2.  public:

  3.   virtual ~Product() {}

  4.   virtual std::string Operation() const = 0;

  5. };

  6.  

  7. class ConcreteProduct1 : public Product {

  8.  public:

  9.   std::string Operation() const override {

  10.     return "{Result of the ConcreteProduct1}";

  11.   }

  12. }; 

  13. class Creator {

  14.  public:

  15.   virtual ~Creator(){};

  16.   virtual Product* FactoryMethod() const = 0;

  17.  

  18.   string SomeOperation() const {

  19.     // Вызываем фабричный метод, чтобы получить объект-продукт.

  20.     Product* product = this->FactoryMethod();

  21.     // Далее, работаем с этим продуктом.

  22.     string result = "Creator: The same creator's code has just worked with " + product->Operation();

  23.     delete product;

  24.     return result;

  25.   }

  26. };

  27.  

  28.  

  29. class ConcreteCreator1 : public Creator {

  30.  public:

  31.   Product* FactoryMethod() const override {

  32.     return new ConcreteProduct1();

  33.   }

  34. };

  35.  

  36. void ClientCode(const Creator& creator) {

  37.   std::cout << "Client: I'm not aware of the creator's class, but it still works.\n"

  38.             << creator.SomeOperation() << std::endl;

  39. }

  40.  

  41. int main() {

  42.   std::cout << "App: Launched with the ConcreteCreator1.\n";

  43.   Creator* creator = new ConcreteCreator1();

  44.   ClientCode(*creator);

  45.   std::cout << std::endl;

  46.   delete creator;

  47.   return 0;

  48. }

Соседние файлы в предмете Объектно ориентированное программирование