Suggerirei di inserire IsDoable () nell'interfaccia o nell'oggetto e quindi fornire l'azione per il controllo come parametro. Se action è un'istanza di una classe Action, dovrebbe essere facile utilizzare un IsDoable (Action myAction) sovraccarico che include una chiamata a getPossibleAction ().
Quindi, la linea diventerebbe: if(object.isDoable(action))
Oppure puoi modificarlo in modo che l'azione non debba essere dichiarata in anticipo: if(object.isDoable(object.getObjectType().getPossibleAction())
Se sottoclassi "oggetto" correttamente (quindi puoi usare il valore da .GetObjectType () e chiamiamo questo childObject) e il linguaggio lo consente, dovresti essere in grado di fare if(childObject.isDoable(childObject.getPossibleAction())
Devo notare che, se stai creando l'azione prima di verificare se è fattibile, potresti volerlo ripensare. Di solito è meglio determinare quali azioni sono fattibili e poi crearle. Ma ci sono anche molti scenari in cui l'unico modo per determinare la capacità di fare è vedere quale sarebbe il risultato, o per confrontare l'azione con un oggetto che contiene il set di regole (che è utile quando ci sono più set di regole che possono essere usato - come le diverse varianti che i casinò hanno per un singolo gioco di carte). Quindi il tuo ordine delle operazioni potrebbe essere perfettamente valido.