工厂方法模式是new操作的替代品,以往的new 对象都交给factory(工厂)去解决,你只需要提出你的要求(class name);
例如:
游戏中的东南亚版本;可能有新加坡,泰国,马拉西亚三个版本,但是他们客户端只有一个,登录操作方式和流程会有差异,这种情况下就可以使用工厂方法模式;
产品类:
public interface Country { public void connection(); }
新加坡:
public class Singepore implements Country { @Override public void connection() { System.out.println("connect Singepore!"); } }
泰国:
public class Thailand implements Country { @Override public void connection() { System.out.println("connect Thailand!"); } }
马来西亚:
public class Malaysia implements Country { @Override public void connection() { System.out.println("connect Malaysia!"); } }
以上三个国家是产品类country 的实现;以前的创建方式是:Malaysia m=new Malaysia(); 现在就可以将new的操作交给factory 去实现;
建立工厂区:
public class CountryFactory { public static <T extends Country> T createCountry(Class<T> c) { Country country = null; try { country = (Country) Class.forName(c.getName()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return (T) country; } }
具体使用:
public class ConnectionCountry { public static void main(String[] args) { //connection Singepore Singepore singepore = CountryFactory.createCountry(Singepore.class); singepore.connection(); //connection Thailand Thailand thailand = CountryFactory.createCountry(Thailand.class); thailand.connection(); } }
总结:
工厂方法模式主要的思想就是,将具有相同操作接口的类,类的创建不在使用new,而是统一的将此操作交给factory去实现,只需要将你需要的名字传递进去,工厂自然会给你想要的;