Code for Inherit design

2

Voglio scrivere un'applicazione che prende Wireshark File e legge tutti i pacchetti in questo file. Quindi voglio poter supportare diversi formati. Fino ad ora sono in grado di gestire Libpcap, Pcapng e TcpDump. Quindi mi chiedo caldo per progettare la mia applicazione. Stavo pensando di creare una classe astratta:

 public abstract class WiresharkFile
    {
        private string _fileName;
        private int _packets;
        private string _duration;
        protected abstract IEnumerable<Packet> ReadPackets(string file);
    }

Come puoi vedere tutti i formati che ereditano da questo WiresharkFile hanno nome, pacchetto (ogni file contiene diversi pacchetti e durata). E anche il metodo ReadPackets perché ogni formato ha bisogno di leggere il file in altro modo. Quindi la mia domanda è nel caso in cui scelgo il file e voglio leggere i suoi pacchetti come posso sapere quale sia il formato del file per eseguire il metodo corretto ReadPackets che ho per ogni formato.

    
posta mark yer 05.11.2015 - 11:28
fonte

1 risposta

3

Quello che stai cercando è un fabbrica . Nella forma più semplice, questo è solo un metodo statico come

public abstract class WiresharkFile
{
     public static WiresharkFile WiresharkFileFactory(string filename)
     {
     //  ... logic here to create either a LibpcapWireSharkFile, a 
     //  ... PcapngWireSharkFile, or another subclass instance
     }
}  

Se questo metodo ha una certa complessità, puoi considerare di spostare quel metodo fuori dalla classe WiresharkFile in una classe factory separata. E se hai bisogno di quelle classi in una libreria estensibile, dove puoi aggiungere nuove derivazioni in seguito senza cambiare il codice di fabbrica, puoi dare un'occhiata a modello di fabbrica astratto .

Nota che quando il tuo factory crea l'oggetto, puoi già passare il nome del file a quell'oggetto, quindi i tuoi metodi ReadPackets() non dovrebbero più avere alcun parametro filename .

    
risposta data 05.11.2015 - 13:13
fonte

Leggi altre domande sui tag