Per prima cosa, lascia che ti mostri un esempio (scritto in ActionScript 3.0):
class GameObject {
    public static function MakeFromName( pName:String,
                                         pAtlas:TextureAtlas = null,
                                         pGameData:Object = null ):GameObject {
        // If these arguments are not passed, they default to the static INSTANCE's 
        // currentAtlas and currentData.
        if (pAtlas == null) pAtlas = GameBaseClass.INSTANCE.currentAtlas; // <--
        if (pGameData == null) pGameData = GameBaseClass.INSTANCE.currentData; // <--
        var theSymbolData:Object = pGameData.symbols[pName];
        var theSymbolTextures:Vector.<Texture> = pAtlas.getTextures( pName );
        var newGO:GameObject = new GameObject();
        newGO.MakeFromData( pName, theSymbolTextures, theSymbolData );
        return newGO;
    }
    // MakeFromData defined somewhere down in the code...
}
Sto avendo questo dibattito con un collega per quanto riguarda i precedenti parametri "null" (fondamentalmente facoltativi).
 Per me, ha senso risolvere automaticamente quei due parametri ( pAtlas  e  pGameData ) in una sorta di risorsa centrale (in questo caso, l'Atlante primario e Dati utilizzati nel gioco). Questo   GameBaseClass    va di pari passo con   GameObject   , quindi non vedo alcun danno nel riferirmi alle sue proprietà di istanza di singleton. Lo sviluppatore ha ancora la possibilità di fornire il proprio Atlas e dati. 
 MA, il mio collega crede che questo leghi le classi troppo insieme - non è abbastanza sciolto.
Posso capire il suo punto se si riferisse effettivamente alle classi derivate usate nel gioco (cioè:   AwesomeGame.INSTANCE.currentAtlas   , dove  AwesomeGame  estende  GameBaseClass ). Ma non lo è! Dal suo punto di vista, lo sviluppatore dovrebbe essere costretto a inserire ogni singolo parametro, nulla di opzionale (in questa particolare situazione). 
C'è un modo per avere il meglio di entrambi i mondi?
L'unico altro modo in cui posso pensare è solo scrivere due metodi separati (uno con il 2 ° e il 3 ° argomento e uno senza), ma che comunque non risolve il problema con la dipendenza GameBaseClass.
Qualche idea?
  EDIT:
Nell'esempio precedente, ho utilizzato ActionScript 3.0 che non supporta l'assegnazione di variabili non costanti. In altre parole, consente numeri hardcoded, stringhe (anche vuote), booleane e costanti (anche se non penso che funzionerebbe con costanti non primitive, potrebbe comunque essere sbagliato). Poiché   GameBaseClass.INSTANCE.currentAtlas    è una proprietà che potrebbe cambiare nel corso della durata dell'applicazione in esecuzione, non può essere indicata come valore di default 'compile-time'.
Spero che abbia più senso!