Mi piace il polimorfismo. Lo consiglio a tutti i miei amici. Una soluzione polimorfica sarebbe simile a questa:
f(thingy) {
thingy.doIt()
}
class A { doIt() { a(); } }
class B { doIt() { b(); } }
class C { doIt() { c(); } }
thingyFactory(str){
if(str==='a'){
return A();
}else if(str==='b'){
return B();
}else{
return C();
}
}
f(thingyFactory("a"))
f(thingyFactory("b"))
f(thingyFactory("c"))
Aspetta, sembra che tu stia usando javascript. Ecco un po 'di polimorfismo funzionale.
a = function (){ document.writeln( "<br> a" ); }
b = function (){ document.writeln( "<br> b" ); }
c = function (){ document.writeln( "<br> c" ); }
factory = function(str) {
if(str==='a'){
return a;
}else if(str==='b'){
return b;
}else{
return c;
}
}
polymorphic = factory('b');
polymorphic();
Come puoi vedere finiamo per usare comunque un parametro. Non si tratta tanto di non usare mai i parametri per prendere decisioni. Si tratta di non accoppiare queste decisioni con il fare ciò che è stato deciso. A volte prendere queste decisioni è costoso, a volte possiamo renderle in fase di compilazione. a volte è solo difficile da guardare, a volte vuoi diverse aree di codice per gestire queste due responsabilità separate.
E, naturalmente, a volte i puristi OO sono ingegneri. Non fare mai cose del genere senza capire perché stai facendo cose del genere. Fare questo ti fa qualcosa. Assicurati di beneficiare di quel qualcosa. Altrimenti tutto quello che ottieni è più codice.