44 工厂模式 - 图1

简单工厂

  1. public interface Bean{}
  2. class A implements Bean{}
  3. class B implements Bean{}
  4. public class BeanFactory {
  5. public static Bean createBean(String name) {
  6. if ("a".equals(name.toLowerCase())) {
  7. return new A();
  8. }
  9. if ("b".equals(name.toLowerCase())) {
  10. return new B();
  11. }
  12. }
  13. }

工厂方法

可以看到简单工厂不符合开闭原则,当要添加一个C类时,需要修改BeanFactory

  1. public interface Bean{}
  2. class A implements Bean{}
  3. class B implements Bean{}
  4. public interface IBeanFactory {
  5. Bean createBean();
  6. }
  7. public class ABeanFactory implements IBeanFactory {
  8. @Override
  9. public Bean createBean() {
  10. return new A();
  11. }
  12. }
  13. public class BBeanFactory implements IBeanFactory {...}

相较于简单工厂,工厂方法更符合开闭原则,如果需要添加C工厂,只需实现IBeanFactory即可。
但是当你使用起来的时候:

  1. IBeanFactory beanFactory = null;
  2. if (需要ABean的判断) {
  3. beanFactory = new ABeanFactory();
  4. } else if (需要BBean的判断) {
  5. beanFactory = new BBeanFactory();
  6. }

好像一切改变了,但又都没有改变。。。

抽象方法