需求:实现一个简单工厂,客户端根据需求获取实现类。
简单工厂优点:
- 客户端不需要知道工厂内部实现,然组件外部实现面向接口编程。
- 客户端、实现类解耦。
一、接口及实现类
//接口 public interface Api { void say(); } //实现类A public class ImplA implements Api { @Override public void say() { System.out.println("ImplA"); } } //实现类B public class ImplB implements Api { @Override public void say() { System.out.println("ImplB"); } }
二、工厂
public class Factory { public static Api createApi() throws Exception{ InputStream is = Client.class.getResourceAsStream("peizhi.properties");//配置文件中配置需要的实现类名称 Properties properties = new Properties(); properties.load(is); String className = (String) properties.get("impl"); return (Api) Class.forName(className).newInstance(); } }
peizhi.properties内容:impl=pattern.simplefactory.ImplB(包名+实现类名)
tips:关于加载propertie一些小结 https://www.cnblogs.com/liuboyuan/p/9595412.html
客户端:
public class Client { public static void main(String[] args) throws Exception { Api api = Factory.createApi(); api.say();//执行结果:ImplB } }