1. 程式人生 > >23種設計模式——簡單工廠模式

23種設計模式——簡單工廠模式

簡單工廠模式並不是23個設計模式的一員,但是一般將它作為學習設計模式的起點。簡單工廠模式又稱為靜態工廠模式,屬於類建立型模式。

可以根據傳遞引數的不同返回不同類的例項。專門定義了一個類來建立其它類,這個類被稱為工廠類。被建立的例項通常具有相同的父類。

簡單工廠模式結構圖:

工廠類接收不同引數就可以選擇產生不同的例項。工廠方法是靜態的。返回型別為抽象產品型別即Product型別。ConcreteProduct為具體的產品角色,可以是多個。建立的物件都是這個角色的具體例項。

下面通過具體例子來具體說明一下。

使用簡單工廠模式模擬女媧(Nvwa)造人(Person),如果傳入引數M,則返回一個Man物件,如果傳入引數W,則返回一個Woman物件,如果傳入引數R,則返回一個Robot物件。請用程式設計實現上述場景。

Man、Woman、Robot就是我們想要的物件,也就相當於簡單工廠中的產品。而女媧就相當於簡單工廠模式中的工廠。通過工廠類傳入不同的引數判斷應該產生哪中例項物件。也就是女媧造哪種人。

Person程式碼

public interface Person {
    public void make();
}

Man程式碼

public class Man implements Person {

    /**
     * Default constructor
     */
    public Man() {
    }
    public void make(){
        System.out.print("生產男人");
    }

}

Woman程式碼

public class Woman implements Person {

    /**
     * Default constructor
     */
    public Woman() {
    }
    public void make(){
        System.out.print("生產女人");
    }

}

Robot程式碼

public class Robot implements Person {

    /**
     * Default constructor
     */
    public Robot() {
    }
    public void make(){
            System.out.print("生產機器人");
        }

}

Nvwa程式碼

public class Nvwa {

    /**
     * Default constructor
     */
    public Nvwa() {
    }
    //傳輸引數arg
    public  static Person factoryMethod(String arg){
        //判斷引數,再選擇呼叫哪個類
        if(arg.equalsIgnoreCase("M"))
        {
            return new Man();
        }else if(arg.equalsIgnoreCase("W"))
        {
            return new Woman();
        }else if(arg.equalsIgnoreCase("R"))
        {
            return new Robot();
        }else
        {
            return null;
        }
    }

}