Простой заводской шаблон
wiki: Простой фабричный паттерн не относится к 23 классическим паттернам проектирования GoF, но обычно используется в качестве основы для изучения других фабричных паттернов.Идея его построения очень проста, и его основной процесс выглядит следующим образом:
Во-первых, инкапсулируйте соответствующий код различных объектов, которые необходимо создать (например, различные объекты диаграммы), в разные классы, эти классы называются конкретными классами продуктов, и абстрагируйте и извлеките их общий код и инкапсулируйте их в абстрактный класс продукта. , каждый конкретный класс продукта является подклассом абстрактного класса продукта, затем предоставляется класс фабрики для создания различных продуктов, а в классе фабрики предоставляется метод фабрики для создания продуктов, который можно использовать в соответствии с входящими различными параметрами create различные конкретные объекты продукта; клиенту нужно только вызвать фабричный метод класса фабрики и передать соответствующие параметры, чтобы получить объект продукта.
Простой фабричный шаблон определяется следующим образом:
Простой фабричный шаблон: определите фабричный класс, который может возвращать экземпляры разных классов в соответствии с разными параметрами.Созданные экземпляры обычно имеют общий родительский класс. Поскольку метод, используемый для создания экземпляра в простом фабричном шаблоне, является статическим методом, простой фабричный шаблон также называется шаблоном статического фабричного метода (Статический фабричный метод), который относится к шаблону создания класса.
Смысл простого фабричного шаблона в том, что когда вам что-то нужно, вам нужно только передать правильный параметр, и вы можете получить нужный вам объект, не зная деталей его создания. Структура простого фабричного шаблона относительно проста, и его ядром является дизайн фабричного класса, структура которого показана на рисунке.
Я скопировал выше...
Что нужно сделать, когда мы хотим создать объект, вызвать один и тот же метод и передать разные параметры, чтобы вернуть нам разные объекты.
Конечно, предполагается, что классы, соответствующие этим объектам, реализуют один и тот же интерфейс.
Например:
Мы создаем структуру фабрики и создаем интерфейс продукта. Фабрика может создавать продукты. Пока в метод фабрики передаются разные параметры, могут быть возвращены разные объекты, реализующие интерфейс продукта.
- Создайте заводскую структуру:
type Factory struct {
}
- Создать интерфейс продукта.Для удобства здесь написан только один метод.Пожалуйста,расширьте его под свои нужды.
type Product interface {
create()
}
- Создайте два продукта: Продукт 1 и Продукт 2, которые реализуют интерфейс Продукта:
// 产品1,实现产品接口
type Product1 struct {
}
func (p1 Product1) create() {
fmt.Println("this is product 1")
}
// 产品2,实现产品接口
type Product2 struct {
}
func (p1 Product2) create() {
fmt.Println("this is product 2")
}
- Добавьте метод в фабричную структуру для производства продукта (создание экземпляра объекта):
func (f Factory) Generate(name string) Product {
switch name {
case "product1":
return Product1{}
case "product2":
return Product2{}
default:
return nil
}
}
- Таким образом, вы можете получить разные экземпляры продукта, передав разные методы:
// 创建一个工厂类,在应用中可以将这个工厂类实例作为一个全局变量
factory := new(Factory)
// 在工厂类中传入不同的参数,获取不同的实例
p1 := factory.Generate("product1")
p1.create() // output: this is product 1
p2 := factory.Generate("product2")
p2.create() // output: this is product 2
Приведенный выше пример — это всего лишь простейший пример, созданный для объяснения идеи фабричного паттерна, вот пример применения на практике:
bingo-log
Являетсяgo
Пакет журнала языка, вы можете настроить формат вывода журнала, вот простой заводской шаблон, все реализованоConnector
Структура интерфейса может быть передана в структуру журнала в качестве параметра для достижения цели настройки формата вывода.
адрес проекта:bingo-log
Анализ идей:Разработать пакет обработки логов на основе go
Пожалуйста, перейдите непосредственно к проектуREADME.md
Проверьте метод использования в , и проверьте общую идею дизайна в анализе мыслей.
Вот плюсы и минусы фабричного шаблона:
-
Преимущества: фабричный класс является ядром всего фабричного шаблона. Нам нужно только передать данную информацию, чтобы создать требуемый экземпляр. Когда несколько человек сотрудничают, их можно создавать напрямую, не зная внутренних зависимостей между объектами, что выгодно Оптимизация всей программной архитектуры
-
Недостатки: класс фабрики содержит логику создания всех экземпляров.Если возникнет проблема с классом фабрики, это повлияет на все экземпляры.Кроме того, продукты, произведенные в классе фабрики, основаны на общем интерфейсе.Как только вы захотите добавить различные виды продуктов, это увеличит сложность фабричного класса, смешает разные типы продуктов, нарушит единую ответственность и уменьшит гибкость и ремонтопригодность системы, а при добавлении новых продуктов фабричный класс должен быть изменен, что нарушает принцип «система открыта для расширения и закрыта для модификации»
Таким образом, у нас есть более сложные шаблоны проектирования для адаптации к более сложным системам~
Давайте послушаем следующее разложение ~ ~
Исходный код этой статьи находится в этом репозитории:шаблон дизайна голанг
Рекламируйте и рекомендуйте фреймворк go web, написанный вамиbingo, просить звезду, просить пиар ~