24.3 类加载的应用:可配置的策略
24.3 类加载的应用:可配置的策略
可以通过ClassLoader的loadClass或Class.forName自己加载类,但什么情况需要自己加载类呢?很多应用使用面向接口的编程,接口具体的实现类可能有很多,适用于不同的场合,具体使用哪个实现类在配置文件中配置,通过更改配置,不用改变代码,就可以改变程序的行为,在设计模式中,这是一种策略模式。我们看个简单的示例,定义一个服务接口IService:
1 | public interface IService { |
客户端通过该接口访问其方法,怎么获得IService实例呢?查看配置文件,根据配置的实现类,自己加载,使用反射创建实例对象,示例代码为:
1 | public class ConfigurableStrategyDemo { |
config.properties的内容示例为:
1 | service=shuo.laoma.dynamic.c87.ServiceB |
代码比较简单,就不赘述了。完整代码可参看https://github.com/swiftma/program-logic ,位于包shuo.laoma.dynamic.c87下。