Non mi è chiaro che hai bisogno di qualsiasi modello di progettazione - almeno non nel senso del libro "Gang of Four".
Dalla tua descrizione del problema:
Every combination of arguments needs a different algorithm
ciò di cui hai bisogno è un modo per ottenere da input - > uscita dove l'input è "combinazione di argomenti" e l'output è "algoritmo". Si tratta essenzialmente di una tabella hash (o di una funzione), in cui:
-
chiavi : alcune proprietà degli argomenti specifici presenti
-
valori : algoritmi (l'esatta implementazione potrebbe essere funzioni, oggetti, ecc. a seconda della lingua che stai usando e di quanto sia conveniente ogni scelta).
La seconda parte del problema - "Il metodo .createBuffer ha richiesto e argomenti facoltativi" - non è sufficientemente ben specificato per dare una risposta sicura e dipenderà anche dalla lingua scelta. Se la tua lingua supporta argomenti opzionali e valori predefiniti, questo problema si risolve quasi da solo:
def createBuffer(self, radius, direction="outside")
...
Se sei in Java, puoi usare i tipi di riferimento e controllare null
, convertendoli in valori predefiniti dove necessario. O ancora meglio, prova questo - aiuta chiarisci la tua intenzione di utilizzare i tipi nullable ad altri programmatori!
public void createBuffer(float radius, Optional<Direction> direction) {
if ( direction.isAbsent() ) {
direction = new Direction("outside");
}
....
}
Come altri hanno menzionato, potresti anche creare il pattern Builder, ma personalmente non lo farei a meno che non fossi sicuro di averne bisogno, perché un singolo metodo con una singola firma di tipo è più semplice e facile da usare.