1. 程式人生 > >java23種設計模式(一)工廠方法模式

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

在說工廠方法模式之前,先了解一下簡單工廠模式。工廠方法模式其實是在簡單工廠上面做了一些增強。
簡單工廠模式:有一個專門的類來生產其他類的例項,生產的這些例項有一個共同父類。這個跟我們的多型有一點像。
例子:
假如我們有一個滑鼠工廠,這個工廠既可以生產聯想滑鼠,又可以生產巨集碁滑鼠。
程式碼如下:
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>,每日技術推送文章供大家學習參考。