Thursday, April 28, 2011

If else or Switch case to Polymorphism

If you try to express your logic in if-else way like this,

      private static String getSoundIfElseWay(String animal) {  
           if (animal.equalsIgnoreCase("Dog"))  
                return "Bark";  
           else if (animal.equalsIgnoreCase("Cat"))  
                return "Mew";  
           else if (animal.equalsIgnoreCase("Lion"))  
                return "Roar";  
           return "";  
      }  



then polymorphic way would be,

 private static String getSoundPolymorphicWay(Animal animal){  
      return animal.say();  
 }  

 public abstract class Animal {  
      public abstract String say();  
 }  

 public class Dog extends Animal{  
      @Override  
      public String say() {  
           return "Bark";  
      }  
 }  


 public class Cat extends Animal {  
      @Override  
      public String say() {  
           return "Mew";  
      }  
 }  


 public class Lion extends Animal {  
      @Override  
      public String say() {  
           return "Roar";  
      }  
 }  


The gist is simple.

Look at the change in behavior based on the condition. If you could come up with a object than could take this behavior, push that to the corresponding object.

Same rule applies to switch-case also.