導航:首頁 > 解決方法 > 工廠方法簡單工廠

工廠方法簡單工廠

發布時間:2022-07-07 07:29:24

㈠ 使用簡單工廠模式的優點是什麼

簡單工廠模式的優點:
1、工廠類含有必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅「消費」產品;
2、簡單工廠模式通過這種做法實現了對責任的分割,它提供了專門的工廠類用於創建對象。
3、客戶端無須知道所創建的具體產品類的類名,只需要知道具體產品類所對應的參數即可,對於一些復雜的類名,通過簡單工廠模式可以減少使用者的記憶量。
4、通過引入配置文件,可以在不修改任何客戶端代碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。
(1)工廠方法簡單工廠擴展閱讀:
簡單工廠模式的缺點:
1、由於工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
2、使用簡單工廠模式將會增加系統中類的個數,在一定程序上增加了系統的復雜度和理解難度。
3、系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過於復雜,不利於系統的擴展和維護。
4、簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。
參考資料來源:搜狗網路-簡單工廠模式

㈡ 簡單工廠和工廠方法的區別是什麼

自己管理自己--簡單工廠;
通過一個頂級工廠介面或抽象類(一般為介面),管理具體工廠類--工廠方法;

簡單工廠不需要頂級類型,自己構造自己,通常為擁有一個私有構造方法和一個能夠向外界提供自己實例的靜態方法.單例模式和多例模式都是簡單工廠的特例.

工廠方法,擁有一個頂級工廠介面,每個具體工廠管理自己的產品,通過頂級工廠借口向外界提供工廠的實例.工廠方法使用時應該注意,工廠的繼承結構要與產品的繼承結構相同.

㈢ java簡單工廠模式是什麼

簡單工廠模式的:簡單工廠模式是類的創建模式,又叫做靜態工廠方法(Static Factory Method)模式。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。
那麼簡單工廠模式是在什麼場景下使用呢,下面就以本人的理解舉例說明:

就拿登錄功能來說,假如應用系統需要支持多種登錄方式如:口令認證、域認證(口令認證通常是去資料庫中驗證用戶,而域認證則是需要到微軟的域中驗證用戶)。那麼自然的做法就是建立一個各種登錄方式都適用的介面,如下圖所示:

public interface Login {
//登錄驗證
public boolean verify(String name , String password);
}

public class DomainLogin implements Login {

@Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* 業務邏輯
*/
return true;
}

}

public class PasswordLogin implements Login {

@Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* 業務邏輯
*/
return true;
}

}

我們還需要一個工廠類LoginManager,根據調用者不同的要求,創建出不同的登錄對象並返回。而如果碰到不合法的要求,會返回一個Runtime異常。

public class LoginManager {
public static Login factory(String type){
if(type.equals("password")){

return new PasswordLogin();

}else if(type.equals("passcode")){

return new DomainLogin();

}else{
/**
* 這里拋出一個自定義異常會更恰當
*/
throw new RuntimeException("沒有找到登錄類型");
}
}
}

測試類:

public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String loginType = "password";
String name = "name";
String password = "password";
Login login = LoginManager.factory(loginType);
boolean bool = login.verify(name, password);
if (bool) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}
}

簡單工廠模式的結構如下圖:

我們可以設想一下真實的場景,如果把上面的Test當做一個servlet的話,當客戶端發起登錄請求——>請求交給服務端的Servlet——>Servlet根據客戶端傳遞的loginType調用工廠類LoginManager的factory()方法——>factory()方法根據參數loginType創建相應的登錄驗證類(DomainLogin或PasswordLogin)並返回——>登錄驗證類調用方法verify()驗證用戶名密碼是否正確

假如不使用簡單工廠模式則驗證登錄Servlet代碼如下(假設Test為一個Servlet,變數loginType、name、password表示從客戶端傳遞過來的參數):

public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub

String loginType = "password";
String name = "name";
String password = "password";
//處理口令認證
if(loginType.equals("password")){
PasswordLogin passwordLogin = new PasswordLogin();
boolean bool = passwordLogin.verify(name, password);
if (bool) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}
//處理域認證
else if(loginType.equals("passcode")){
DomainLogin domainLogin = new DomainLogin();
boolean bool = domainLogin.verify(name, password);
if (bool) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}else{
/**
* 業務邏輯
*/
}
}
}

上面的代碼會不會很蛋疼啊。。。呵呵

《JAVA與模式》一書中使用java.text.DataFormat類作為簡單工廠模式的典型例子敘述。

簡單工廠模式的優點

模式的核心是工廠類。這個類含有必要的邏輯判斷,可以決定在什麼時候創建哪一個登錄驗證類的實例,而調用者則可以免除直接創建對象的責任。簡單工廠模式通過這種做法實現了對責任的分割,當系統引入新的登錄方式的時候無需修改調用者。

簡單工廠模式的缺點

這個工廠類集中了所以的創建邏輯,當有復雜的多層次等級結構時,所有的業務邏輯都在這個工廠類中實現。什麼時候它不能工作了,整個系統都會受到影響。

㈣ 簡單工廠模式與工廠方法模式的相同點和不同點

建議LZ把簡單工廠,工廠方法和抽象工廠一起研究下,呵呵,前一段我老師讓我研究下這3種模式的不同,一起學習可能更明白了。
簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用於創建對象的介面。
先來看看它的組成:
1)工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現。
2)抽象產品角色:它一般是具體產品繼承的父類或者實現的介面。在java中由介面或者抽象類來實現。
3)具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現。
工廠方法模式去掉了簡單工廠模式中工廠方法的靜態屬性,使得它可以被子類繼承。這樣在簡單工廠模式里集中在工廠方法上的壓力可以由工廠方法模式里不同的工廠子類來分擔。
看下它的組成:
1)抽象工廠角色: 這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的介面或者必須繼承的父類。在java中它由抽象類或者介面來實現。
2) 具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。
3)抽象產品角色:它是具體產品繼承的父類或者是實現的介面。在java中一般有抽象類或者介面來實現。
4)具體產品角色:具體工廠角色所創建的對象就是此角色的實例。在java中由具體的類來實現。

㈤ 簡單工廠、工廠方法、抽象工廠有什麼區別

區別
簡單工廠 : 用來生產同一等級結構中的任意產品。(對於增加新的產品,無能為力)
工廠方法 :用來生產同一等級結構中的固定產品。(支持增加任意產品)
抽象工廠 :用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支持增加產品族)

以上三種工廠 方法在等級結構和產品族這兩個方向上的支持程度不同。所以要根據情況考慮應該使用哪種方法。

㈥ 簡單工廠模式,工廠方法模式和抽象工廠模式有何區別

工廠方法模式:
一個抽象產品類,可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類只能創建一個具體產品類的實例。

抽象工廠模式:
多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類可以創建多個具體產品類的實例。

區別:
工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。

㈦ 簡單工廠模式是什麼

專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。它又稱為靜態工廠方法模式,屬於類的創建型模式。 簡單工廠模式的UML類圖(見右圖) 簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類(這些產品類繼承自一個父類或介面)的實例。 該模式中包含的角色及其職責 工廠(Creator)角色 簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。 抽象(Proct)角色 簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共介面。 具體產品(Concrete Proct)角色 簡單工廠模式的特點: 簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。 不難發現,簡單工廠模式的缺點也正體現在其工廠類上,由於工廠類集中了所有實例的創建邏輯,所以「高內聚」方面做的並不好。另外,當系統中的具體產品類不斷增多時,可能會出現要求工廠類也要做相應的修改,擴展性並不很好。

㈧ 簡單工廠的工廠方法

你會建立一個專門生產Sample實例的工廠:
public class Factory{
public static Sample creator(int which){
//getClass 產生Sample 一般可使用動態類裝載裝入類。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
那麼在你的程序中,如果要實例化Sample時.就使用
Sample sampleA=Factory.creator(1);
這樣,在整個就不涉及到Sample的具體子類,達到封裝效果,也就減少錯誤修改的機會,這個原理可以用很通俗的話來比喻:就是具體事情做得越多,越容易范錯誤.這每個做過具體工作的人都深有體會,相反,官做得越高,說出的話越抽象越籠統,范錯誤可能性就越少.好象我們從編程序中也能悟出人生道理?呵呵.
使用工廠方法 要注意幾個角色,首先你要定義產品介面,如上面的Sample,產品介面下有Sample介面的實現類,如SampleA,其次要有一個factory類,用來生成產品Sample,如下圖,最右邊是生產的對象Sample:
進一步稍微復雜一點,就是在工廠類上進行拓展,工廠類也有繼承它的實現類concreteFactory了。 工廠模式中有: 工廠方法(Factory Method) 抽象工廠(Abstract Factory).
這兩個模式區別在於需要創建對象的復雜程度上。如果我們創建對象的方法變得復雜了,如上面工廠方法中是創建一個對象Sample,如果我們還有新的產品介面Sample2.
這里假設:Sample有兩個concrete類SampleA和SampleB,而Sample2也有兩個concrete類Sample2A和SampleB2
那麼,我們就將上例中Factory變成抽象類,將共同部分封裝在抽象類中,不同部分使用子類實現,下面就是將上例中的Factory拓展成抽象工廠:
public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(String name);
}
public class SimpleFactory extends Factory{
public Sample creator(){
.........
return new SampleA
}
public Sample2 creator(String name){
.........
return new Sample2A
}
}
public class BombFactory extends Factory{
public Sample creator(){
......
return new SampleB
}
public Sample2 creator(String name){
......
return new Sample2B
}
}
從上面看到兩個工廠各自生產出一套Sample和Sample2,也許你會疑問,為什麼我不可以使用兩個工廠方法來分別生產Sample和Sample2?
抽象工廠還有另外一個關鍵要點,是因為 SimpleFactory內,生產Sample和生產Sample2的方法之間有一定聯系,所以才要將這兩個方法捆綁在一個類中,這個工廠類有其本身特徵,也許製造過程是統一的,比如:製造工藝比較簡單,所以名稱叫SimpleFactory。
在實際應用中,工廠方法用得比較多一些,而且是和動態類裝入器組合在一起應用 我們以Jive的ForumFactory為例,這個例子在前面的Singleton模式中我們討論過,現在再討論其工廠模式:
public abstract class ForumFactory {
private static Object initLock = new Object();
private static String className = com.jivesoftware.forum.database.DbForumFactory;
private static ForumFactory factory = null;
public static ForumFactory getInstance(Authorization authorization) {
//If no valid authorization passed in, return null.
if (authorization == null) {
return null;
}
//以下使用了Singleton 單態模式
if (factory == null) {
synchronized(initLock) {
if (factory == null) {
......
try {
//動態轉載類
Class c = Class.forName(className);
factory = (ForumFactory)c.newInstance();
}
catch (Exception e) {
return null;
}
}
}
}
//Now, 返回 proxy.用來限制授權對forum的訪問
return new ForumFactoryProxy(authorization, factory,
factory.getPermissions(authorization));
}
//真正創建forum的方法由繼承forumfactory的子類去完成.
public abstract Forum createForum(String name, String description)
throws UnauthorizedException, ForumAlreadyExistsException;
....
}
因為現在的Jive是通過資料庫系統存放論壇帖子等內容數據,如果希望更改為通過文件系統實現,這個工廠方法ForumFactory就提供了提供動態介面:
private static String className = com.jivesoftware.forum.database.DbForumFactory;
你可以使用自己開發的創建forum的方法代替com.jivesoftware.forum.database.DbForumFactory就可以.
在上面的一段代碼中一共用了三種模式,除了工廠模式外,還有Singleton單態模式,以及proxy模式,proxy模式主要用來授權用戶對forum的訪問,因為訪問forum有兩種人:一個是注冊用戶 一個是遊客guest,那麼那麼相應的許可權就不一樣,而且這個許可權是貫穿整個系統的,因此建立一個proxy,類似網關的概念,可以很好的達到這個效果.
看看Java寵物店中的CatalogDAOFactory:
public class CatalogDAOFactory {
/**
* 本方法制定一個特別的子類來實現DAO模式。
* 具體子類定義是在J2EE的部署描述器中。
*/
public static CatalogDAO getDAO() throws CatalogDAOSysException {
CatalogDAO catDao = null;
try {
InitialContext ic = new InitialContext();
//動態裝入CATALOG_DAO_CLASS
//可以定義自己的CATALOG_DAO_CLASS,從而在無需變更太多代碼
//的前提下,完成系統的巨大變更。
String className =(String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
catDao = (CatalogDAO) Class.forName(className).newInstance();
} catch (NamingException ne) {
throw new CatalogDAOSysException(
CatalogDAOFactory.getDAO: NamingException while
getting DAO type : + ne.getMessage());
} catch (Exception se) {
throw new CatalogDAOSysException(
CatalogDAOFactory.getDAO: Exception while getting
DAO type : + se.getMessage());
}
return catDao;
}
}
CatalogDAOFactory是典型的工廠方法,catDao是通過動態類裝入器className獲得CatalogDAOFactory具體實現子類,這個實現子類在Java寵物店是用來操作catalog資料庫,用戶可以根據資料庫的類型不同,定製自己的具體實現子類,將自己的子類名給與CATALOG_DAO_CLASS變數就可以。
由此可見,工廠方法確實為系統結構提供了非常靈活強大的動態擴展機制,只要我們更換一下具體的工廠方法,系統其他地方無需一點變換,就有可能將系統功能進行改頭換面的變化

㈨ 工廠模式,簡單工廠模式,抽象工廠模式三者有什麼區別

工廠模式,簡單工廠模式,抽象工廠模式三者區別如下:

1、首先,三者的創建對象是不相同的。

進行創建對象時,「工廠模式」不使用new創建對象,而是使用Factory模式;「簡單工廠模式」則是通過fw模式來建立對象;「抽象工廠模式」使用迭代模式來創建對象。

(9)工廠方法簡單工廠擴展閱讀:

簡單工廠模式優缺點

1、優點:
工廠類含有必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅"消費"產品。簡單工廠模式通過這種做法實現了對責任的分割。

當產品有復雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。

2、缺點:
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於復雜,違背了"開放--封閉"原則(OCP)。另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。

閱讀全文

與工廠方法簡單工廠相關的資料

熱點內容
要如何快速減肥的方法 瀏覽:588
買手機記賬方法 瀏覽:293
座椅模塊電腦針腳確定方法 瀏覽:14
正確取葯方法是 瀏覽:857
多級泵安裝方法 瀏覽:94
黑坑釣黑魚的最佳方法 瀏覽:78
內嵌鈦金條幾字形安裝方法 瀏覽:29
申論教育的手段和方法有哪些 瀏覽:403
音標如何掌握方法 瀏覽:94
瞄怎麼使用方法 瀏覽:903
電信呼叫轉移怎麼設置方法 瀏覽:91
怎樣可以使胸變大的方法視頻 瀏覽:751
三明熱電合金分析儀使用方法 瀏覽:285
常用的矢量數據拼接方法包括 瀏覽:42
長高訓練方法例表 瀏覽:246
除鐵綉用什麼方法 瀏覽:412
蘋果電池百分比在哪裡設置方法 瀏覽:256
森林臻鑽的食用方法 瀏覽:366
雙聯開關線連接方法圖 瀏覽:980
檢測肺炎支原體的方法 瀏覽:403