Pular para conteúdo

Abstract Factory de Comunidades

classDiagram
direction TB
    class CriadorDeComunidade {
        -factory: ComunidadeFactory
        -passos: List~String~
        +CriadorDeComunidade(factory: ComunidadeFactory)
        +montarConfiguracao(nome: String, descricao: String) ConfiguracaoComunidade
        -garantirMesmaFamilia(produtos: List) void
    }

    class ComunidadeFactory {
        +definirFactory(categoria: String)$ ComunidadeFactory
        +criarTema() TemaVisual
        +criarPoliticaModeracao() PoliticaModeracao
        +criarWidgetPadrao() WidgetPadrao
    }

    class ComunidadeTecnologiaFactory {
        +criarTema() TemaVisual
        +criarPoliticaModeracao() PoliticaModeracao
        +criarWidgetPadrao() WidgetPadrao
    }
    class ComunidadeEsportesFactory {
        +criarTema() TemaVisual
        +criarPoliticaModeracao() PoliticaModeracao
        +criarWidgetPadrao() WidgetPadrao
    }
    class ComunidadeCulturaFactory {
        +criarTema() TemaVisual
        +criarPoliticaModeracao() PoliticaModeracao
        +criarWidgetPadrao() WidgetPadrao
    }
    class ComunidadePoliticaFactory {
        +criarTema() TemaVisual
        +criarPoliticaModeracao() PoliticaModeracao
        +criarWidgetPadrao() WidgetPadrao
    }

    class TemaVisual {
        #familia: String
        #corPrimaria: String
        #corSecundaria: String
        #icone: String
        #banner: String
        +aplicar(pagina: HTMLElement) void
    }
    class TemaTecnologia
    class TemaEsportes
    class TemaCultura
    class TemaPolitica

    class PoliticaModeracao {
        #familia: String
        #nivelRigor: String
        #exigeAprovacaoPrevia: boolean
        #regra: String
        +moderar(conteudo: String) boolean
    }
    class PoliticaModeracaoTecnica
    class PoliticaModeracaoEsportes
    class PoliticaModeracaoCultura
    class PoliticaModeracaoPolitica

    class WidgetPadrao {
        #familia: String
        #titulo: String
        #posicao: String
        #itens: List~String~
        +renderizar() String
    }
    class WidgetTrendingTags
    class WidgetPlacarAoVivo
    class WidgetAgendaCultura
    class WidgetPautaPolitica

    class ConfiguracaoComunidade {
        -nome: String
        -descricao: String
        -tema: TemaVisual
        -moderacao: PoliticaModeracao
        -widget: WidgetPadrao
    }

    class Comunidade {
        -corTema: String
        -regrasModeracao: String
        +atualizarDados(descricao: String, regras: String) void
    }

    <<abstract>> ComunidadeFactory
    <<abstract>> TemaVisual
    <<abstract>> PoliticaModeracao
    <<abstract>> WidgetPadrao

    note for ComunidadeFactory "definirFactory() recebe a categoria escolhida
    na área de criação de comunidade e devolve
    a fábrica concreta correspondente"

    CriadorDeComunidade o--> ComunidadeFactory : factory
    CriadorDeComunidade --> TemaVisual : usa
    CriadorDeComunidade --> PoliticaModeracao : usa
    CriadorDeComunidade --> WidgetPadrao : usa
    CriadorDeComunidade ..> ConfiguracaoComunidade : cria
    ConfiguracaoComunidade ..> Comunidade : preenche corTema e regrasModeracao

    ComunidadeFactory <|-- ComunidadeTecnologiaFactory
    ComunidadeFactory <|-- ComunidadeEsportesFactory
    ComunidadeFactory <|-- ComunidadeCulturaFactory
    ComunidadeFactory <|-- ComunidadePoliticaFactory

    TemaVisual <|-- TemaTecnologia
    TemaVisual <|-- TemaEsportes
    TemaVisual <|-- TemaCultura
    TemaVisual <|-- TemaPolitica
    PoliticaModeracao <|-- PoliticaModeracaoTecnica
    PoliticaModeracao <|-- PoliticaModeracaoEsportes
    PoliticaModeracao <|-- PoliticaModeracaoCultura
    PoliticaModeracao <|-- PoliticaModeracaoPolitica
    WidgetPadrao <|-- WidgetTrendingTags
    WidgetPadrao <|-- WidgetPlacarAoVivo
    WidgetPadrao <|-- WidgetAgendaCultura
    WidgetPadrao <|-- WidgetPautaPolitica

    ComunidadeTecnologiaFactory ..> TemaTecnologia : cria
    ComunidadeTecnologiaFactory ..> PoliticaModeracaoTecnica : cria
    ComunidadeTecnologiaFactory ..> WidgetTrendingTags : cria

    ComunidadeEsportesFactory ..> TemaEsportes : cria
    ComunidadeEsportesFactory ..> PoliticaModeracaoEsportes : cria
    ComunidadeEsportesFactory ..> WidgetPlacarAoVivo : cria

    ComunidadeCulturaFactory ..> TemaCultura : cria
    ComunidadeCulturaFactory ..> PoliticaModeracaoCultura : cria
    ComunidadeCulturaFactory ..> WidgetAgendaCultura : cria

    ComunidadePoliticaFactory ..> TemaPolitica : cria
    ComunidadePoliticaFactory ..> PoliticaModeracaoPolitica : cria
    ComunidadePoliticaFactory ..> WidgetPautaPolitica : cria