jenkins第三方外掛的安裝,maven,tomcat
阿新 • • 發佈:2022-04-18
1 工廠模式簡介
1.1 定義
單工廠模式屬於建立型模式又叫做靜態工廠方法模式,它屬於類建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。
簡單工廠模式專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。
1.2 結構圖
2 簡單工廠模式簡單實現
這裡我們用生產電腦來舉例,假設有一個電腦的代工生產商,它目前已經可以代工生產聯想電腦了,隨著業務的拓展,這個代工生產商還要生產惠普和華碩的電腦,這樣我們就需要用一個單獨的類來專門生產電腦,這就用到了簡單工廠模式。下面我們來實現簡單工廠模式:
public abstract class Computer {
/**
* 產品的抽象方法,由具體的產品類去實現
*/
public abstract void start();
}
2.2 建立具體產品類
接著我們建立各個品牌的電腦,他們都繼承了他們的父類Computer ,並實現了父類的start方法:
2.2.1 聯想電腦:
public class LenovoComputer extends Computer{ @Override public void start() { System.out.println("聯想電腦啟動"); }
2.2.2 惠普電腦:
public class HpComputer extends Computer{
@Override
public void start() {
System.out.println("惠普電腦啟動");
}
}
2.2.3 華碩電腦:
public class AsusComputer extends Computer {
@Override
public void start() {
System.out.println("華碩電腦啟動");
}
}
2.3 建立工廠類
接下來建立一個工廠類,它提供了一個靜態方法createComputer用來生產電腦。你只需要傳入你想生產的電腦的品牌,它就會例項化相應品牌的電腦物件:
public class ComputerFactory {
public static Computer createComputer(String type){
Computer mComputer=null;
switch (type) {
case "lenovo":
mComputer=new LenovoComputer();
break;
case "hp":
mComputer=new HpComputer();
break;
case "asus":
mComputer=new AsusComputer();
break;
}
return mComputer;
}
}
2.4 客戶端呼叫工廠類
客戶端呼叫工廠類,傳入“hp”生產出惠普電腦並呼叫該電腦物件的start方法:
public class CreatComputer {
public static void main(String[]args){
ComputerFactory.createComputer("hp").start();
}
}
3 優點和缺點
3.1 優點
- 工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪一個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅“消費”產品;簡單工廠模式通過這種做法實現了對責任的分割,它提供了專門的工廠類用於建立物件。
- 客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,通過簡單工廠模式可以減少使用者的記憶量。
- 通過引入配置檔案,可以在不修改任何客戶端程式碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。
3.2 缺點
- 由於工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。
- 使用簡單工廠模式將會增加系統中類的個數,在一定程式上增加了系統的複雜度和理解難度。
- 系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,同樣破壞了“開閉原則”;在產品型別較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴充套件和維護。
- 簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。
- 這些缺點在工廠方法模式中得到了一定的克服。
4 適用環境
在以下情況下可以使用簡單工廠模式:
- 工廠類負責建立的物件比較少:由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。
- 客戶端只知道傳入工廠類的引數,對於如何建立物件不關心:客戶端既不需要關心建立細節,甚至連類名都不需要記住,只需要知道型別所對應的引數。