一點點
-
工廠模式是我們最爲常用的設計模式之一,目的是用於隱藏創建對象的細節。
-
工廠模式的核心是: 工廠類(Factory)。工廠類作爲中間人的角色幫我們創建對象。通俗點說:我們要獲取對象時,不是通過自己new出來的,而是通過工廠類來幫我們創建的。
-
工廠模式可以細分爲:簡單工廠、工廠方法 和 抽象工廠
簡單工廠模式案例:
-
1. 抽象出一個頂級的接口
I18N
(作爲工廠類的返回對象使用) -
2. 創建3個實現類
Chinese
,Britain
和Japanese
,並實現I18N
接口 -
3. 創建
I18NFactory
工廠類,並提供一個靜態方法來創建實現類對象,該靜態方法會返回一個I18N
具體實現類的對象。 -
4. 然後使用者就可以直接面向工廠類進行開發咯
步驟 1
創建一個接口:
package com.cd.design.factory;
/**
* @Author: 落葉無痕
* @Date: 2020/4/21 1:19
*/
public interface I18N {
//抽象出來的最頂級的方法
String getLanguage();
}
步驟 2
創建實現接口的實體類
public class Chinese implements I18N {
@Override
public String getLanguage() {
return "中文. . .";
}
}
public class Britain implements I18N {
@Override
public String getLanguage() {
return "英語. . .";
}
}
public class Japanese implements I18N {
@Override
public String getLanguage() {
return "日語. . .";
}
}
步驟 3
創建一個工廠,根據傳遞的實現類類型信息創建實現類對象。
public class I18NFactory {
/* 根據傳遞的實現類類型信息創建實現類對象
*這裏使用static修飾,這樣就可以直接類名.方法名調用該方法。即可以簡化開發,又節省了創建對象帶來的消耗。
*/
public static I18N getI18NObject(String area){
if(area.equals("Chinese")){
return new Chinese();
}else if(area.equals("Britain")){
return new Britain();
}else if(area.equals("Chinese")){
return new Japanese();
}else {
return null;
}
}
}
步驟 4
使用該工廠,通過傳遞類型獲取指定指定實現類對象。
package com.cd.design.factory;
/**
* @Author: 落葉無痕
* @Date: 2020/4/21 1:18
*/
public class Software {
public static void main(String[] args) {
//更改getI18NObject()方法的參數值,獲得不同類的對象
I18N i18N = I18NFactory.getI18NObject("Chinese");
System.out.println(i18N.getLanguage());
}
}
簡單工廠總結:
-
何時使用:明確地計劃在不同條件下創建不同實例時(要創建實例的類所實現的功能都大致相同)
-
優點:1. 使用者想創建一個類,只需知道其名稱即可。2.屏蔽了類的對象的創建邏輯和具體實現,使用者只需關心實現接口。