Perché abbiamo bisogno di una classe di contesto nel modello di strategia?

3

Per il modello di strategia, perché abbiamo bisogno di una classe di contesto per chiamare l'algoritmo appropriato? Perché non possiamo semplicemente fare Strategy s = new OperationAdd() ? In questo modo, utilizziamo ancora il polimorfismo.

    
posta Armon Safai 18.11.2015 - 05:41
fonte

3 risposte

3

In alcune lingue, in particolare C # e Java, è possibile definire strategie, non l'algoritmo di ordinamento, ma il modo in cui gli oggetti ordinati vengono confrontati per scopi di ordine.

Ad esempio, in C #, potresti dire qualcosa come

var sort = new MergeSort(new ImaginaryNumberComparator());

e MergeSort tratterà gli oggetti ordinati come numeri immaginari ai fini dell'ordine.

Tuttavia, la modifica dell'algoritmo di ordinamento richiede la conoscenza dell'intera raccolta, non solo di due dei suoi membri.

    
risposta data 18.11.2015 - 07:13
fonte
2

Il diagramma delle classi UML nell'articolo di Wikipedia mostra Context per includere la strategia per composizione. Quindi, la classe, tu usi Strategy dentro, IS un contesto.

class MyClass() {
  public function sort() {
    SortStrategy s=new MergeSort();
  }
}

Qui MyClass è un contesto per la strategia.

    
risposta data 18.11.2015 - 08:56
fonte
0

Nei modelli di strategia, la classe Context è la classe che possiede l'oggetto (concreto) Strategy .

Il motivo per cui chiamare la classe Context piuttosto che Client (o qualcosa di simile) è perché il Pattern Strategico è formulato in modo tale che questa classe fornisca le informazioni contestuali necessarie alle varie implementazioni della Strategia.
Se si dispone di una strategia di ordinamento, il modello di strategia indica che la classe che contiene l'algoritmo di ordinamento da utilizzare passerà anche la raccolta che deve essere ordinata alla strategia di ordinamento e qualsiasi oggetto / funzione di confronto che potrebbe essere necessario.

    
risposta data 18.11.2015 - 11:39
fonte