|
|||
Factory methodФабричный метод – это порождающий паттерн проектирования, который решает проблему создания различных продуктлв без указания конкретных классов продуктов Фабричный метод задает метод, который следует использовать вместо вызова оператора new для создания объектов-продуктов. Подклассы могут переопределить этот метод, чтобы изменять тип задаваемых продуктов. Если использовать премеры выше, то продуктом является IFileOutputter. А для того, чтобы реализовать фабричный метод, необходимо создать класс, который пораждает конкретные продукты WindowsFileOutputter и LinuxFileOutputter. Используется, когда: классу заранее неизвестно, объекты каких подклассов ему нужно создавать. класс спроектирован так, чтобы объекты, которые он создаёт, специфицировались подклассами.
enum class SystemType { WINDOWS, LINUX };
struct FileOutputterFactory { std:: unique_ptr< IFileOutputter> createFileOutputter( const SystemType systemType) const { switch (systemType) { case SystemType:: WINDOWS: { return std:: make_unique< WindowsFileOutputter> (); } case SystemType:: LINUX: { return std:: make_unique< LinuxFileOutputter> (); } } } }; Теперь для того, чтобы записать что-нибудь в файл мы пишем следущее: winFileOutputterPtr-> writeMessage(" some path", " some message" ); или же const auto linFileOutputterPtr = createFileOutputter(SystemType:: LINUX); linFileOutputterPtr-> writeMessage(" some path", " some message" ); Преимущества: · Избавляет класс от привязки к конкретным классам продуктов. · Выделяет код производства продуктов в одно место, упрощая поддержку кода. · Упрощает добавление новых продуктов в программу. · Реализует принцип открытости/закрытости. Недостатки: · Может привести к созданию больших параллельных иерархий классов, так как для каждого класса продукта надо создать свой подкласс создателя.
|
|||
|