23種設計模式——簡單工廠模式
阿新 • • 發佈:2018-12-16
簡單工廠模式並不是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;
}
}
}