package Com.Srini.DesignPatterns.AbstractFactory;
public class AbstractFactoryTest {
public static void main(String a[]){
Button btn = GUIFactory.createButton();
btn.paint();
}
}
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