• Define an interface for creating an object
  • Let the sub-classes decide what class to instantiate
  • Virtual constructor

Different Phones have different OS.

public interface OS {
	public void spec();
}
 
public class Android implements OS {
	public void spec() {
		// ...
	}
} 
 
public class Ios implements OS {
	public void spec() {
		// ...
	}
} 
 
public class Windows implements OS {
	public void spec() {
		// ...
	}
} 
 
public class Usual {
	public static void main(String a[]) {
		OS obj = new Windows(); 
		// The client will know what classes you are using
		obj.spec();
	}	
}
 
public class OSFactory {
	public OS getInstance(String str) {
		if (str.equals("1")
			return new Android();
		else if (str.equals("2")
			return new Ios();
		else
			return new Windows();
	}
}
public class FactoryMain() {
	public static void main(String a[]) {
		OSFactory fac = new OSFactory();
		OS obj = fac.getInstance('1');
		obj.spec();
	}
}
				

Refs

  1. https://www.youtube.com/watch?v=KewVXDBmUhw&list=PLsyeobzWxl7r2ZX1fl-7CKnayxHJA_1ol&index=2