SringSring

Tuesday, 28 October 2014

Abstract Design Pattern in java

package Com.Srini.DesignPatterns.AbstractFactory;

public class AbstractFactoryTest {

   public static void main(String a[]){
       Button btn = GUIFactory.createButton();
       btn.paint();
   }
}

----------------------------------------------------------
package Com.Srini.DesignPatterns.AbstractFactory;

public interface Button {
public void paint();
}

--------------------------------------------------
package Com.Srini.DesignPatterns.AbstractFactory;

public interface ButtonFactory {
public Button createButton();
}
-----------------------------------------------------
package Com.Srini.DesignPatterns.AbstractFactory;

public class GUIFactory {
private GUIFactory(){
       //make private constructor..
   }
    
   public static Button createButton(){
        
       String os = null;
       /**
        * this method should work based on the operating system
        * it is running on. First we need to decide which operating 
        * system is it.
        * 
        * for the example purpose, i will hardcode OS as windows.
        */
        
       os = "mac"; //this is hardcoded value. it should be assigned
                       // with dynamic logic.
       if("windows".equalsIgnoreCase(os)){
           return new WindowsFactory().createButton();
       } else if("mac".equalsIgnoreCase(os)){
           return new MacOsFactory().createButton();
       }
        
       return null;
   }
}
---------------------------------------------------------
package Com.Srini.DesignPatterns.AbstractFactory;

public class MacButton implements Button {
@Override
    public void paint() {
        /** add code to paint MAC OS button **/
        System.out.println("painting MAC OS button...");
    }
}
------------------------------------------------------------
package Com.Srini.DesignPatterns.AbstractFactory;

public class MacOsFactory implements ButtonFactory {

@Override
   public Button createButton() {
       /**
        * this method creates a button for MAC OS 
        * button
        */
       System.out.println("creating mac os button...");
       return new MacButton();
   }

}
----------------------------------------------------
package Com.Srini.DesignPatterns.AbstractFactory;



public class WindowsButton implements Button {

@Override
    public void paint() {
        /** add code to paint windows button **/
        System.out.println("painting windows button...");
    }

}
--------------------------------------------------
package Com.Srini.DesignPatterns.AbstractFactory;

public class WindowsFactory implements ButtonFactory {

@Override
   public Button createButton() {
        
       /**
        * this method creates a button for windows 
        * button
        */
       System.out.println("creating windows button...");
       return new WindowsButton();
   }

}
-----------------------------------------------------

No comments:

Post a Comment