Skip to content

Instantly share code, notes, and snippets.

@sensoria-pro
Created May 23, 2024 13:42
Show Gist options
  • Select an option

  • Save sensoria-pro/a31ea0a7a5262b9d14418572e2dd84b1 to your computer and use it in GitHub Desktop.

Select an option

Save sensoria-pro/a31ea0a7a5262b9d14418572e2dd84b1 to your computer and use it in GitHub Desktop.

Revisions

  1. sensoria-pro created this gist May 23, 2024.
    50 changes: 50 additions & 0 deletions Simple factory pattern
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    package main

    import (
    "fmt"
    "net/http"
    )

    // Конфигурация сервера
    type ServerConfig interface {
    GetPort() string
    }

    // Фабрика конфигурации
    type ConfigFactory interface {
    CreateConfig() ServerConfig
    }

    // Конкретная фабрика для разработческой конфигурации
    type DevConfigFactory struct{}

    func (f *DevConfigFactory) CreateConfig() ServerConfig {
    return &DevServerConfig{port: ":8080"}
    }

    // Конкретная фабрика для продакшн конфигурации
    type ProdConfigFactory struct{}

    func (f *ProdConfigFactory) CreateConfig() ServerConfig {
    return &ProdServerConfig{port: ":8081"}
    }

    // Реализация конфигураций
    type DevServerConfig struct{ port string }

    func (c *DevServerConfig) GetPort() string { return c.port }

    type ProdServerConfig struct{ port string }

    func (c *ProdServerConfig) GetPort() string { return c.port }

    func main() {
    configFactory := &ProdConfigFactory{} // Можно заменить на ProdConfigFactory для продакшн конфигурации
    config := configFactory.CreateConfig()

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
    })

    http.ListenAndServe(config.GetPort(), nil)
    }