Rappresentazione UML di pattern factory specifici

2

Devo creare un diagramma di classe UML dal seguente codice di esempio (Perl). Non penso che il modello di fabbrica standard corrisponda al mio caso o che non capisco correttamente. Non ho AbstractFactory e ConcreteFactory ma un singolo Factory .

Che aspetto ha questo esempio nel diagramma delle classi UML?

Modifica : questo è solo un esempio molto piatto e semplice. La vera applicazione ha molti "Tipi" con flussi di lavoro totalmente diversi. Il diagramma di classe serve per ottenere una panoramica sulla struttura del foro. Non proprio per il flusso di lavoro interno come fanno i diagrammi di sequenza.

package Module::Factory;
sub new { bless { type => $_[1] }, $_[0]; }
sub create {
    my( $self, $name ) = @_;
    my $object = "Module::Types::$self->{type}"->new( $name );
    return( $object );
}

package Module::Types::Test1;
sub new { bless { name => $_[1] }, $_[0]; }
sub test {
    my( $self ) = @_;
    say "Hello, $self->{name}.";
    return( $self );
}

package Module::Types::Test2;
sub new { bless { name => $_[1] }, $_[0]; }
sub test {
    my( $self ) = @_;
    say "Bye, $self->{name}.";
    return( $self );
}

# even more Module::Types::TestN packages...

package main;
foreach my $type ( qw( Test1 Test2 ) ) {
    my $factory = Module::Factory->new( $type );
    foreach my $name ( qw( World John Peter ) ) {
        my $object = $factory->create( $name );
        $object->test();
    }
}
    
posta burnersk 25.07.2012 - 13:51
fonte

1 risposta

5

Puoi disegnare facilmente un diagramma di sequenza UML, ma un diagramma di classe non ti dirà molto, tranne alcuni errori logici.

Disegniamo prima un diagramma di sequenza:

Ora,rimuoveremoFactoryperunmomento,checosaabbiamo?

Hmm, siamo sicuri che ci manchi qualcosa?

Fondamentalmente tutto ciò che fa il tuo modulo Factory è, accorcia uno spazio dei nomi nella sua ultima parte.

Inoltre, che tipo di interfaccia dipende da App?

  1. dipende dall'interfaccia di Factory per la creazione di oggetti con un nome
  2. dipende dall'interfaccia di Test, come lo chiama per il suo lavoro effettivo.

La fabbrica dipende da

  1. Sistema di riflessione di Perl e
  2. Interfaccia di TestModule.

Di solito, una Fabbrica Astratta è chiamata Fabbrica Astratta, perché si trova sulla cima di una "famiglia" di oggetti, tutti condividono la stessa interfaccia. Può essere, che un pattern Factory viene utilizzato per decidere tra due "famiglie" correlate, tutte dotate della stessa interfaccia, ma, ad esempio, una è una libreria di componenti dell'interfaccia utente di Swing, mentre l'altra è una libreria di componenti UI AWT (o Motif e GTK), o un'implementazione "reale" e un'implementazione di simulazione per il test.

Quindi, con questa classe, non è ovvio per cosa stai usando la fabbrica. Stai provando a cambiare spazio dei nomi in una versione di prova per testare?

Puoi disegnare il tuo sistema di classe basandoti su questo (vedi chi dipende da chi e chi è associato a chi - dipende se ne sa, associato se deve saperlo in anticipo per poter chiamare) ma Dubito che sia la soluzione finale.

    
risposta data 25.07.2012 - 22:24
fonte

Leggi altre domande sui tag