工厂模式进阶用法,如何动态选择对象?( 三 )

getInstance需要传入ApplicationContext对象,这样就可以根据类型获取具体的实现了 。
修改所有存储实现类,如下所示:
import org.springframework.stereotype.Component;@Componentclass RemoteServiceLog implements LoggingOperation {static {LoggerFactory.register("REMOTE", RemoteServiceLog.class);}public void log(String message) {// Implementation}}总结我们通过一个例子,不断迭代带大家理解了工厂模式,工厂模式是一种创建型设计模式,用于创建同一类型的不同实现对象 。我们来总结下这种动态选择对象工厂模式的优缺点 。
优点:

  • 容易管理 。在添加新的存储类时,只需将该类放入特定包中,在static代码块中注册它自己到工厂中 。
  • 松耦合,当您添加新的存储实现时,您不需要在工厂类中进行任何更改 。
  • 遵循SOLID编程原则 。
缺点:
  • 如果是用原生通过类加载的方式,代价比较大,因为它涉及 I/O 操作 。但是如果使用的是SpringBoot,则无需担心,因为框架本身会调用组件 。
  • 需要额外编写一个static块,注册自己到工厂中,一不小心就遗漏了 。




推荐阅读