Хелпикс

Главная

Контакты

Случайная статья





Cross-platform design patterns



Cross-platform design patterns

1. Используем интерфейс для создания абстракции.

Допустим реализация какой-то функции зависит от платформы. Например, запись в файл будет различаться на Windows и на Linux-системах. Это значит, что мы можем описать interface IFileOutputter и реализовать его в классах WindowsFileOutputter и LinuxFileOutputter.
Пример C++ кодом:

struct IFileOutputter

{

virtual void writeMessage(std:: string_view filePath, std:: string_view message) const = 0;

};

 

struct WindowsFileOutputter: IFileOutputter

{

void writeMessage(std:: string_view filePath, std:: string_view message) const override

{

   // Specific code for windows-system

   // …

}

};

 

struct LinuxFileOutputter: IFileOutputter

{

void writeMessage(std:: string_view filePath, std:: string_view message) const override

      {

   // Specific code for Linux-system

   // …

    }

};

 

В общих словах если мы не будем тщательно планировать свой дизайн, мы можем получить дублированный код. Решение состоит в том, чтобы создать абстракцию, описывающую поведение записи в файл. Затем во время выполнения мы можем заменить абстракцию ее конкретной реализацией.

 

 

2. Используем Inversion of Control (IoC) для управления зависящими от платформы зависимостями.

Инверсия управления (IoC) — это шаблон проектирования, описывающий сценарий, в котором управление созданием экземпляра объекта является обязанностью другого класса.

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

Мы можем решить IoC проблему используя следующие паттерны:

· The factory method

· The dependency-injection



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.