java23種設計模式(一)工廠方法模式

  • 2019 年 10 月 18 日
  • 筆記

在說工廠方法模式之前,先了解一下簡單工廠模式。工廠方法模式其實是在簡單工廠上面做了一些增強。
簡單工廠模式:有一個專門的類來生產其他類的實例,生產的這些實例有一個共同父類。這個跟我們的多態有一點像。
例子:
假如我們有一個鼠標工廠,這個工廠既可以生產聯想鼠標,又可以生產宏碁鼠標。
代碼如下:
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、鼠標工廠接口:

public interface MouseFactory {        Mouse createMouse();  }

2、聯想鼠標工廠(用來生產聯想鼠標)

public class LenovoMouseFactory implements MouseFactory {      @Override      public Mouse createMouse() {          return new LenovoMouse();      }  }

3、宏碁鼠標工廠(用來生產宏碁鼠標)

public class AcerMouseFactory implements MouseFactory {      @Override      public Mouse createMouse() {          return new AcerMouse();      }  }

鼠標類跟簡單工廠一樣,複製如下:
4、鼠標接口(有一個getName()的方法)

public interface Mouse {        void getName();  }

5、聯想鼠標實現類(實現鼠標接口,可以生產聯想鼠標)

public class LenovoMouse implements Mouse {      @Override      public void getName() {          System.out.println("這個是聯想鼠標");      }  }

6、宏碁鼠標實現類(實現鼠標接口,可以生產宏碁鼠標)

public class AcerMouse implements Mouse {      @Override      public void getName() {          System.out.println("這個是宏碁鼠標");      }  }

7、客戶端(需要鼠標的人,可以買聯想鼠標也可以買宏碁鼠標)

@SpringBootTest  class FactoryApplicationTests {      @Test      void demo(){            LenovoMouseFactory lenovoMouseFactory = new LenovoMouseFactory();          Mouse lenovoMouse = lenovoMouseFactory.createMouse();          lenovoMouse.getName();            AcerMouseFactory acerMouseFactory = new AcerMouseFactory();          Mouse acerMouse = acerMouseFactory.createMouse();          acerMouse.getName();      }  }

我們可以通過不同的工廠來獲取不同實例,假如我們想買一個聯想鼠標,則去聯想工廠買。想買宏碁鼠標,則去宏碁工廠買。
這樣,我們就實現了工廠方法模式,假如我們想要一個華碩鼠標,則建一個華碩工廠去生產華碩鼠標即可。

如果文章對您有幫助,請記得點贊關注喲~
歡迎大家關注我的公眾號<情系IT>,每日技術推送文章供大家學習參考。