come utilizzare lo stesso comportamento in diverse classi

3

Ho un comportamento che mi piacerebbe usare in diverse classi. Queste classi non sono correlate l'una all'altra (nessuna eredità). Sto usando AS3, dove l'ereditarietà multipla non è possibile.

Potrei usare un'interfaccia ma poi dovrei riscrivere la stessa implementazione ogni volta, che è fondamentalmente ciò che sto facendo ora (ma senza l'interfaccia).

Come esempio, ho molte situazioni in cui ho un'icona e un'etichetta di testo. Nei pulsanti, nei segni, ecc. Vorrei centralizzare il comportamento di allineamento tra l'icona e l'etichetta.

Qual è il miglior schema OOP per questo?

    
posta Pier 16.07.2013 - 04:46
fonte

3 risposte

3

Il modello di strategia è quello che userei per questo (incapsulare un algoritmo). Il modo in cui viene eseguito l'allineamento è qualcosa che può essere configurato in fase di runtime. Ci sono anche molti modi diversi per allineare gli elementi in modo da incapsularli dietro un'interfaccia. L'esempio di seguito è un modo in cui è possibile utilizzare il modello di strategia con la classe Aligner.

class Panel
{
    UIElement[] Children;
    IAligner Aligner;

    public SetAlignment(IAligner aligner)
    {
        this.Aligner = aligner;
    }

    public void Render()
    {
        Aligner.Align(Children)
        Display(Children)
    }
}

interface IAligner
{
    void Align(UIElement[] elements)
}

class LeftAligner : IAligner
class RightAligner: IAligner
class CenterAligner: IAligner
    
risposta data 16.07.2013 - 05:58
fonte
2

Sembra che la soluzione migliore sia semplicemente usare la composizione.

Ho trovato la risposta qui link

Nel mio esempio avrei una classe Aligner e compositing un'istanza nelle mie classi.

    
risposta data 16.07.2013 - 05:49
fonte
0

Quando lo stesso comportamento è necessario in più classi, calcola questo comportamento in una nuova classe. In questo caso, creare una nuova classe LabeledIcon contenente un'icona e un'etichetta, correttamente allineate. Crea nuove istanze di LabeledIcon secondo necessità.

    
risposta data 16.07.2013 - 05:24
fonte

Leggi altre domande sui tag