2011-01-09 17 views
8

Per essere sincero, questa è una domanda sui compiti, quindi ti dirò la mia opinione. Puoi farmi sapere i miei errori piuttosto che darmi la soluzione?Quale schema di progettazione devo utilizzare in questa domanda?

Questa è la domanda:

assumono un ristorante che offre solo i seguenti due tipi di pasti: (a) un pasto completo e (b) un pasto economico. Il pasto completo comprende i seguenti prodotti alimentari e viene servito nel seguente ordine: 1. Antipasto 2. Bevanda 3. Piatto principale 4. Dessert Nel frattempo il pasto economico è costituito dai seguenti prodotti alimentari e viene servito nell'ordine seguente: 1. Bere 2. il piatto principale

Identificare il modello di progettazione più appropriato che può essere utilizzata per consentire al cliente di solo ordine utilizzando uno dei due tipi di pasti forniti e che i componenti pasto devono essere serviti nella proposta ordine.

Sono confuso tra Factory e Iterator e li uso entrambi insieme. Usando il modello di fabbrica possiamo creare due pasti completi ed economici e fornire all'utente una classe di oggetti di base che deciderà. Ma come possiamo far rispettare l'ordine degli elementi, ho pensato di usare l'iteratore lungo che itererà attraverso il composito delle due fabbriche create in un certo modo.

Cosa ne pensi?

+6

Penso che la bevanda dovrebbe essere servita prima di entrambi i pasti. –

+0

Fabbrica e iteratore suonano bene! Non capisco cosa intendi per 'iterare attraverso il composito delle due fabbriche create'. Potresti forse spiegare come useresti l'iteratore per progettare il pasto completo (ignorando le fabbriche e il pasto economico per un secondo)? – Ishtar

+0

assumendo che ogni articolo sia una classe e che venga servito al cliente con un metodo in quella classe, come posso servire "apptizer then drink, ..etc" dovrei usare iterator per iterare attraverso quegli oggetti? –

risposta

1

La prima cosa che viene in mente è il modello Decorator In questo modo si potrebbe creare una base di farina e 2 pasti Concreate FullMeal e EconomicMeal allora si può avere i componenti del pasto come decoratori e mescolare e abbinare come ti piace .

+0

Ho pensato anche al pattern di decoratore e in un'applicazione del mondo reale probabilmente lo userei, ma è davvero costruito per aggiungere funzionalità ad-hoc, non tanto per far rispettare un particolare flusso di lavoro/mix di funzionalità che questo problema chiede. – Paul

-4

Penso che i compiti non siano ben formulati. Come citato qui, non vedo la sfida.

Identificare ... design pattern che può essere utilizzato per consentire al consumatore solo ordine utilizzando uno dei due tipi di pasti

Qual è il problema? Basta presentare il cliente con la scelta di 2 opzioni ("choose meal type (1-full, 2-economy): "e il gioco è fatto. Perché è necessario uno schema di progettazione per questo?

Gli schemi di progettazione sono uno strumento per il programmatore/progettista, non l'utente. La domanda (IMHO) dovrebbe essere "proporre modelli di progettazione che consentano al programmatore di ...", ad esempio "... combinare/modificare un tipo di pasto basato su determinati tipi di piatti fissi" o qualcosa del genere

Come detto, la questione non definisce un problema di programmazione/progettazione, o assume in silenzio troppo.

+1

Ti manca il punto. Questo compito In altre parole, uno scenario falso è stato sviluppato per aiutare a imparare quando applicare modelli di design. – Finglas

+1

@ Finglas: oserei dire che ti manca ** il mio ** punto. Capisco perfettamente che questo è un compito a casa, e quali sono i compiti. Sto dicendo che ** questo ** compiti a casa (come citato) non definisce il problema di programmazione/progettazione che deve essere affrontato utilizzando il modello di progettazione. O che è ** troppo implicito ** – davka

+0

Supponendo che sia indirizzato, cosa c'è di sbagliato nella mia soluzione ragazzi ?! –

1

e 'un processo in due fasi, che è credo dove stai ottenendo confuso. la cosa principale che sono cercare è il modello userete per selezionare la logica con cui un utente ordinerà il pasto. Ciò che effettivamente fa questa logica, o in quale ordine viene servito il pasto, non è rilevante per quel pezzo.

Quindi avresti un'interfaccia Pasello di base o una classe astratta che ha un metodo o metodi per effettuare un ordine (non dice che il cibo deve essere richiesto nell'ordine di servire, o, tu? ll nota). La classe Meal avrà probabilmente un paio di metodi, uno dei quali include ServeFood() o simile. Avrai due lezioni concrete per questo (ad esempio FullMeal ed EconomyMeal), e dal momento che l'ordine di esse non è importante, puoi implementare l'utilizzo di una Factory.

Le classi concrete saranno responsabili di servire il cibo nell'ordine corretto quando viene chiamato ServeFood().

+0

Come follow-up, se dovessi anche parlare di come servire il cibo, allora all'interno delle lezioni concrete, probabilmente faresti un iteratore. – Paul

+0

è esattamente quello che stavo cercando di dire, ma l'hai dichiarato in un modo magico .. grazie per aver reso l'idea molto più chiara ora :) –

+0

Se vuoi un modo divertente per far colpo su modelli di design, iyad, dovresti dare un'occhiata Head First Design Patterns (http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?s=books&ie=UTF8&qid=1294587433&sr=1-1). Mentre la Gang of Four è il lavoro fondamentale, l'approccio Head First è * veramente * accessibile e divertente per iniziare su alcuni dei più comuni. – Paul

Problemi correlati