![]()
|
|||||||
Cross-platform design patternsСтр 1 из 4Следующая ⇒ Cross-platform design patterns 1. Используем интерфейс для создания абстракции. Допустим реализация какой-то функции зависит от платформы. Например, запись в файл будет различаться на Windows и на Linux-системах. Это значит, что мы можем описать interface IFileOutputter и реализовать его в классах WindowsFileOutputter и LinuxFileOutputter. 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
|
|||||||
|