Ⅰ Python設計模式:簡單工廠模式
簡單工廠模式又稱之為靜態工廠方法,屬於創建型模式。
在簡單工廠模式中,可以根據傳遞的參數不同,返回不同類的實例。簡單工廠模式定義了一賣猛個類,這個類專門用於創建其他類的實例,這些被創建的類都有一個共同的父類。
簡單工廠模式:通過介面創建對象,且不會暴露對象創建邏輯
在設計模式中主要用於抽象對象的創建過程,讓用戶可以指定自己想要的對象而不必關心對象的實例化過程。
這樣做的好處是用戶只需通過固定的介面而不是直接去調用類的實例化方法來獲得一個對象的實例,隱藏了實例創建過程的復雜度,解耦了生產實例和使用實例的代碼,降低了維護的復雜性。
工廠類負責創建的對象比較少。簡單工廠模式最大的優點在於實現對象的創建和對象的使用分離,但是如果產品過多時,會導致工廠代碼非常復雜。
簡單工廠模式的要點就在於當你需要什麼,只需要傳入一個正確的參數,就可以獲取你所需要的對象,而無須知道其創建細節。
看待任何事物都需要用辯證的觀點去看,任何事物都有兩面性,簡單工廠模式也是如此。有優點也有缺點。
優點:用戶只需要傳入具體產品,就可以得到實例化的類,不需要知道具體實現過態拿程,一定程度上節省了理解成本。
缺點:如果具體產品角色很多的時候,定義簡單工中閉橋廠就會比較麻煩。不利於擴展,具體產品比較復雜時也許缺點就大於優點了,還是需要理性選擇。
Ⅱ 工廠模式,簡單工廠模式,抽象工廠模式三者有什麼區別
工廠模式,簡單工廠模式,抽象工廠模式三者區別如下:
1、首先,三者的創建對象是不相同的。
進行創建對象時,「工廠模式」不使用new創建對象,而是使用Factory模式;「簡單工廠模式」則是通過fw模式來建立對象;「抽象工廠模式」使用迭代模式來創建對象。
(2)簡單工廠方法的特點擴展閱讀:
簡單工廠模式優缺點
1、優點:
工廠類含有必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅"消費"產品。簡單工廠模式通過這種做法實現了對責任的分割。
當產品有復雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
2、缺點:
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於復雜,違背了"開放--封閉"原則(OCP)。另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。
Ⅲ 簡單工程模式
一、簡單工廠
用一個單獨的類來做這個類創建實例的過程,這就是工廠。
優點:工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟應該創建那個具體類的對象。用戶在使用時可以直接根據工廠類去創建所需的實例,而無需了解這些對象是如何創建以及如何組織的。有利於整個軟體體系結構的優化。
缺點:由於工廠類集中了所有實例的創建邏輯,這弊搜陪就直接導致一旦這個工廠出了問題,所有的客戶端都會受到牽連;而且由於簡單工廠模式的產品是基於一個共同的抽象類或者介面,這樣一來,一旦產品的種類增加的時候,既有不同的產品介面或者抽象類的時候,工廠類就需要判斷何時創建何種種類的產品,這就和創建何種種類的產品相互混淆在漏逗了一起,違背了單一職責,導致系統喪失靈活性和可維護行。而且更重要的是,簡單工廠模式租蠢違背了「開發封閉原則」,就是違背了「系統對擴展開放,對修改關閉」的原則,因為當我新增加一個產品的時候必須修改工廠類,相應的工廠類就需要重新編譯一遍。
二、結構圖
三、demo
Ⅳ 簡單工廠模式的優缺點
優點
工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該創建哪個具體類的對象.通過使用工廠類,外界可以從直接創建具體產品對象的尷尬局面擺脫出來,僅僅需要負責「消費」對象就可以了。而不必管這些對象究竟如何創建及如何組織的.明確了各自的職責和權利,有利於整個軟體體系結構的優化。
缺點
由於工廠類集中了所有實例的創建邏輯,違反了高內聚責任分配原則,將全部創建邏輯集中到了一個工廠類中;它所能創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。
當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件創建不同實例的需求.這種對條件的判斷和對具體產品類型的判斷交錯在一起,很難避免模塊功能的蔓延,對系統的維護和擴展非常不利;
這些缺點在工廠方法模式中得到了一定的克服。
使用場景
工廠類負責創建的對象比較少;
客戶只知道傳入工廠類的參數,對於如何創建對象(邏輯)不關心;
由於簡單工侍局廠很容易違反高鋒敗內聚責任分配原則,因此一般只在很簡單的情況下應用。
C++代碼: //演算法的父類,抽象出返回結果的介面classOperation{public:virtualint老基讓GetResult()=0;public:doublem_Num1;doublem_Num2;};//工廠類,用於生產相應的演算法子類classOperationFactry{public:OperationFactry(void);~OperationFactry(void);public:staticOperation*CreateOperate(intn){switch(n){case1:returnnewOperationAdd;break;}}};//演算法子類,由工廠類創建,重寫父類中的虛函數classOperationAdd:PublicOperation{public:intGetResult();};
Ⅳ Python設計模式:工廠方法模式
工廠,大家一般能想到的是生產產品的地方, 在設計模式中,工廠可分為:簡單工廠模式、工廠方法模式。 在前期推文 Python 簡單工廠模式 中有關於簡單工廠模式的解讀。
根據工廠的抽象程度可分為:工廠方法模式、抽象工廠模式。 該模式用於封裝和管理對象的創建,是一種創建型模式。
在簡單工廠模式中,只提供了一個工廠類,該工廠類處於對產品類進行實例化的中心位置,它知道每一個產品對象的創建細節,並決定何時實例化哪一個產品類。
簡單工廠模式最大的缺點是:當有新產品要加入到系統中時,必須修改工廠類,加入必要的處理邏輯,這違背了「開閉原則」。
在簡單工廠模式中,所有的產品都是由同一個工廠創建,工廠類職責較重,業務邏輯較為復賀型雜,具體產品與工廠類之間的耦合度高,嚴重影響了系統的靈活性和擴展性,而工廠方法模式則可以很好地解決這一問題。因此工廠方法模式應運而生。
(1)、工廠方法模式定義一個用於創建對象的介面,但是工廠本身並不負責創建對象,而是讓子類決定將哪一個類實例化。工廠方法模式讓一個類的實例化延遲到其子類。 工廠方法的創建是通過繼承而不是通過實例化來完成的。
(2)、工廠方法模式就是簡單工廠模式的進一步抽象。由於面向對象多態性,工廠方法模式保持了簡單工廠的優點同時克服了它的缺點。工廠方法模式中,核心的工廠被提升為一個抽象類,將具體的創建工作交給他的子類完成。
這個抽象的工廠類僅規定具體工廠實現的介面,而不明確指出如何實例化一個產品類,這使得工廠方法模式允許系統在不修改原有產品結構的情況下輕松的引進新產品。
工廠方法使設計更加具有可定製性,它可以返回相同的實例或子類,而不是某種類型的對象。
前期分享的 Python 簡單工廠模式 和今天分享的Python 工廠方法模式,大家在實際應用時能解決問題滿足需求即可,可靈活變通,自由選擇,無所謂哪種設計模式更高級。衫攜
同時無論哪種設計模式,由於可能封裝了大量禪塌猜對象和工廠創建,當有新加入產品的需求時,需要修改已定義好的工廠相關的類,因此對於產品和工廠的擴展性不太友好,在選擇使用時利弊需要權衡一下。
Ⅵ 工廠模式,簡單工廠模式,抽象工廠模式三者有什麼區別
工廠模式,簡單工廠模式,抽象工廠模式三者區別如下:
1、首先,三者的創建稿跡對象是不相同的。
進行創建對象時,「工廠模式」不使用new創建對象,而是使用Factory模式;「簡單工廠模式」則是通過fw模式來建立對象;「抽象工廠模式」使用迭代模式來創建對象。
(6)簡單工廠方法的特點擴展閱讀:
簡單工廠模式優缺點
1、優點:
工廠類含有必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅"消費"產品。簡單工廠模式通過這種做法實現了對責任的分割。
當產品有復雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
2、缺點:
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於復雜,違背了"開放--封閉"原則(OCP)。另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。
Ⅶ 什麼是簡單工廠和工廠方法
簡單工廠又叫靜態工廠 工廠方法又叫多態性工廠 抽象工廠又叫工具箱 區別: 先看簡單工廠的缺點:復雜的多層次結構;工廠類形成上帝類;靜態方法無法由子類繼承;擴展困難,對開閉原則支持不夠。 工廠方法就是為了克服以上缺點產生的。他將上帝類要做的事分給了下面的子類來完成,它比簡單工廠抽象 而抽象工廠比前兩者更抽象,更具一般性. 他可以提供統一的介面,使得不必說明具體狀況的情況下,創建多種不同的對象
Ⅷ 簡單工廠模式是什麼
專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。它又稱為靜態工廠方法模式,屬於類的創建型模式。 簡單工廠模式的UML類圖(見右圖) 簡單工廠模式的實質是由一個工廠類根據傳入的參沒前局數,動態決定應該創建哪一個產品類(這些產品類繼承自一個父類或介面)的實例。 該模式中包含的角色及其職責 工廠(Creator)角色 簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,枯讓創建所需的產品對象。 抽象(Proct)角色 簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共介面。 具體產品(Concrete Proct)角色 簡單工廠模式的特點: 簡單工廠模式的創建目標,所有創悔滲建的對象都是充當這個角色的某個具體類的實例。 不難發現,簡單工廠模式的缺點也正體現在其工廠類上,由於工廠類集中了所有實例的創建邏輯,所以「高內聚」方面做的並不好。另外,當系統中的具體產品類不斷增多時,可能會出現要求工廠類也要做相應的修改,擴展性並不很好。
Ⅸ 簡單工廠模式到底違反開閉原則嗎
這個搭首此是相對而言來說的,簡單工廠最大的特點兩個,1是封裝芹蘆類的實例化操作,2是把創建選擇(分支選擇放在工廠類中)。第二個特點當你的開發是反復增加了產品類,那知迅么這個時候因為第二個特點反復的修改工廠類,那應該算是違反了簡單工廠,可以考慮用工廠方法模式。
Ⅹ 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類作為簡單工廠模式的典型例子敘述。
簡單工廠模式的優點
模式的核心是工廠類。這個類含有必要的邏輯判斷,可以決定在什麼時候創建哪一個登錄驗證類的實例,而調用者則可以免除直接創建對象的責任。簡單工廠模式通過這種做法實現了對責任的分割,當系統引入新的登錄方式的時候無需修改調用者。
簡單工廠模式的缺點
這個工廠類集中了所以的創建邏輯,當有復雜的多層次等級結構時,所有的業務邏輯都在這個工廠類中實現。什麼時候它不能工作了,整個系統都會受到影響。