Un semplice metodo di produzione dovrebbe includere l'operazione "nuova"?

-1

Ad esempio, supponiamo che io abbia una classe per creare un pulsante con stili specifici comuni alla mia app, posso avere

  1. Restituisce un nuovo oggetto modificato:

    public class ButtonFactory {
        public static Button createAppButton(String st, int fontSize) {
            Button b = new Button();
            b.setColor(...);
            b.setText(...);
            b.playAnimation(...);
            return b;
        }
    }
    .
    .
    .
    Button b = ButtonFactory.createAppButton("test", 15);
    
  2. Modifica pulsante Esiste dall'esterno:

    public class ButtonFactory {
        public static void modifyAppButton(Button b, String st, int fontSize){
            b.setColor(...);
            b.setText(...);
            b.playAnimation(...);
        }
    }
    .
    .
    .
    Button b = new Button();
    ButtonFactory.modifyAppButton(b, "test", 15);
    

Quale dovrei usare?

    
posta mmmaaa 27.07.2018 - 04:24
fonte

3 risposte

5

Una fabbrica per definizione costruisce cose.

Dovresti sempre dare un nome alle cose in base a ciò che fanno in modo che gli altri programmatori non siano sorpresi dal comportamento del tuo codice.

Entrambe queste classi sono potenzialmente utili, ma se la chiamate come factory allora dovrebbe costruire e restituire istanze

    
risposta data 27.07.2018 - 04:38
fonte
1
  • solo la prima classe è una fabbrica.

  • Ancora più importante, non renderei statico il metodo factory factory (o almeno non lo chiamerei in questo modo). A meno che non istanziate in realtà alcuni oggetti con un'interfaccia o utilizzate qualche altro meccanismo di programmazione generico, questo è un inutile uso inefficace del modello di fabbrica. Devi essere in grado di cambiare le fabbriche in qualche modo. Una rappresentazione migliore per una fabbrica potrebbe essere un OGGETTO FUNZIONALE (ad es. link ) o std::function<> (in C ++). In questo modo, puoi utilizzare una funzione statica (caso più comune) o una funzione associata (con dati).

Considera alcuni pattern stilistici per i tuoi pulsanti, come il colore di sfondo, la forma o alcuni di questi. Si può avere questo DEFAULT nella fabbrica PREDEFINITA. Ma potresti avere diverse fabbriche che riempiono diversi valori predefiniti (magari in base alle impostazioni dell'utente).

Se la tua fabbrica di bottoni era un oggetto, il valore predefinito potrebbe essere quello che hai fornito nell'esempio. Ma potresti invocare lo stesso codice con un nuovo factory che ha generato valori diversi per quei parametri non specificati.

    
risposta data 27.07.2018 - 04:56
fonte
0

Considera invece l'utilizzo di un pattern Prototype . Stabilisci le proprietà che in genere desideri in un pulsante, quindi utilizzale come modello per tutti gli altri.

Un metodo factory sarebbe utile qui solo se avessi diversi tipi tra cui scegliere (e abstract factory se la creazione stessa fosse molto diversa da quella successiva). Dato che stai producendo un singolo pulsante, la fabbrica probabilmente non è necessaria qui.

    
risposta data 27.07.2018 - 08:12
fonte

Leggi altre domande sui tag