Aiuta con Abstract Factory Pattern

6

Ho bisogno di aiuto con un design pattern factory astratto. Questa domanda è una continuazione di: Guida alla progettazione con processo parallelo

Sono davvero confuso dove dovrei inizializzare tutte le impostazioni per ogni tipo di supporto (es: RS232, TCP / IP, ecc.).

In allegato c'è il disegno su come sto configurando il pattern:

Comemostrato,quandovienecreatounsupporto,ciascunmezzoimponeun'interfacciaICreateMedium.SuppongocheilmetodoCreate()creianchel'oggettocorretto,comeSerialPortserialPort=newSerialPort("COM1", baud); tuttavia, TCPIPMedium avrebbe un problema con l'interfaccia perché non avrebbe bisogno di inizializzare un oggetto porta seriale.

So che sto facendo qualcosa di gravemente sbagliato qui. Non riesco a capirlo e sono rimasto bloccato per un po '.

Ciò che ho anche confuso mostrando l'interfaccia IMedium otterrà l'accesso all'oggetto di comunicazione una volta che è stato creato in modo che possa scrivere il pacchetto byte [] appropriato.

Qualsiasi guida sarebbe molto apprezzata. Il mio obiettivo principale è far sì che la classe Communicator sputi un pacchetto senza preoccuparsi di quale tipo di supporto sia attivo.

    
posta brazc0re 08.06.2012 - 18:57
fonte

1 risposta

5

In questo caso, se il costruttore RS232Medium richiede un SerialPort , allora RS232 Factory , RS232MediumCreate come lo hai chiamato, avrà bisogno di avere quella porta già memorizzata al suo interno:

(mi dispiace per Java)

class RS232MediumCreate implements ICreateMedium {
    SerialPort port;

    RS232MediumCreate(SerialPort port) {
        this.port = port;
    }

    @Override
    public IMedium Create() {
        return new Rs232Medium(port);
    }
}

Ora il tuo utilizzo di Communicator è simile a questo:

void getMediumFrom(ICreateMedium factory) {
    IMedium medium = factory.Create();

    //...
}

e i tuoi usi di tale metodo saranno simili a questo:

communicator.getMediumFrom(new RS232MediumCreate(new SerialPort("COM1"), baud));

Quando usi un Pattern di fabbrica astratto, come hai detto, le tue interfacce devono essere allineate e quindi qualsiasi differenza nei parametri richiesti per l'oggetto finale deve essere considerata nella Fabbrica corrispondente.

Ciò significa che Factory deve già sapere quali parametri saranno usati . Questa è una conseguenza del modello di fabbrica, e per aggirare il problema sarebbe vanificato lo scopo di utilizzare una fabbrica astratta.

    
risposta data 08.06.2012 - 19:33
fonte

Leggi altre domande sui tag