在说工厂方法模式之前,先了解一下简单工厂模式。工厂方法模式其实是在简单工厂上面做了一些增强。

简单工厂模式:有一个专门的类来生产其他类的实例,生产的这些实例有一个共同父类。这个跟我们的多态有一点像。
例子:
假如我们有一个鼠标工厂,这个工厂既可以生产联想鼠标,又可以生产宏碁鼠标。
代码如下:
1、鼠标工厂(可以生产联想鼠标和宏碁鼠标)

public class MouseFactory {      /**      * 生产一个鼠标      * @param i      * @return      */      public Mouse createMouse(int i){          Mouse mouse = null;         switch (i){             case 1:                 mouse = new LenovoMouse();                 break;             case 2:                 mouse = new AcerMouse();                 break;         }         return mouse;     } }

2、鼠标接口(有一个getName()的方法)

public interface Mouse {      void getName(); }

3、联想鼠标实现类(实现鼠标接口,可以生产联想鼠标)

public class LenovoMouse implements Mouse {     @Override     public void getName() {         System.out.println("这个是联想鼠标");     } }

4、宏碁鼠标实现类(实现鼠标接口,可以生产宏碁鼠标)

public class AcerMouse implements Mouse {     @Override     public void getName() {         System.out.println("这个是宏碁鼠标");     } }

5、客户端(需要鼠标的人,可以买联想鼠标也可以买宏碁鼠标)

@SpringBootTest class FactoryApplicationTests {      @Test     void contextLoads() {          MouseFactory factory = new MouseFactory();         Mouse mouse = factory.createMouse(2);         mouse.getName();     }

这样简单工厂就算实现了,可以传入1和2让工厂分别生成联想鼠标和宏碁鼠标。
接下来我们在简单工厂的基础上看看工厂方法模式。
工厂方法模式:定义一个专门生产其他类实例的接口,让子类决定具体生产哪个类的实例。
例子:
有一个鼠标工厂开了两个子公司,一个是联想鼠标工厂用来专门生产联想鼠标,另一个是宏碁鼠标工厂用来专门生产宏碁鼠标。
代码如下:
1、鼠标工厂接口: