簡單工廠模式java
Ⅰ 求java工廠模式的一個簡單代碼例子,盡量簡單
這個應該比較簡單一點。
某系統日誌記錄器要求支持多種日誌記錄方式,如文件記錄、資料庫記錄等,且用戶可以根據要求動態選擇日誌記錄方式。現使用工廠方法模式設計該系統,並寫出相應Java代碼。
interface Log{
public void writeLog();
}
class FileLog implements Log{
public void writeLog(){
System.out.println("文件記錄");
}
}
class DatabaseLog implements Log{
public void writeLog(){
System.out.println("資料庫記錄");
}
}
interface LogFactory{
public Log createLog();
}
class FileLogFactory implements LogFactory{
public Log createLog(){
return new FileLog();
}
}
class DatabaseLogFactory implements LogFactory{
public Log createLog(){
return new DatabaseLog();
}
}
public class Client{
public static void main(String[] args) {
try{
Log log;
LogFactory factory;
//這里可以改成使用DOM和Java反射機制讀取XML文件,獲取工廠類名
factory=new DatabaseLogFactory ();
log=factory.createLog();
log.writeLog();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Ⅱ 什麼是Java的工廠模式
factory模式不需要建立什麼包,完全得靠你對factory模式的理解,工廠模式基本上應該是體現了一個多態的概念,用戶只關心結果,而不需要關心其具體過程...
工廠模式有三個參與者,抽象產品(Proct)、工廠(Creator)和具體產品(ConcreteProct)。客戶只會看到工廠和抽象產品。
public interface Proct{
public String getName();
}
public class ConcreteProct implements Proct{
public String getName(){
return "產品1";
}
}
public class Creator{
public static Proct create1(){
return new ConcreteProct();
}
}
工廠模式的作用在於將創建具體產品的方法由工廠類控制,客戶只需要知道產品的抽象類型
Ⅲ 澶у︾敓紱忛煶Java甯歌佽捐℃ā寮忔葷粨
Java甯歌佽捐℃ā寮忓揩鏉ョ湅鐪
1銆佸壋寤哄瀷-宸ュ巶鏂規硶妯″紡:
(1)綆鍗曞伐鍘傛ā寮:
寤虹珛涓涓宸ュ巶綾伙紝騫跺畾涔変竴涓鎺ュ彛瀵瑰疄鐜頒簡鍚屼竴鎺ュ彛鐨勪駭鍝佺被榪涜屽壋寤恆
(2)宸ュ巶鏂規硶妯″紡:
宸ュ巶鏂規硶妯″紡鏄瀵圭畝鍗曞伐鍘傛ā寮忕殑鏀硅繘錛岀畝鍗曞伐鍘傜殑緙洪櫡鍦ㄥ共涓嶇﹀悎鈥滃紑闂鍘熷垯鈥
(3)闈欐佸伐鍘傛柟娉曟ā寮:
闈欐佸伐鍘傛ā寮忔槸灝嗗伐鍘傛柟娉曟ā寮忛噷鐨勬柟娉曠疆涓洪潤鎬佺殑錛屼笉闇瑕佸壋寤哄疄渚嬶紝鐩存帴璋冪敤鍗沖彲銆
2銆佸壋寤哄瀷-鎶借薄宸ュ巶妯″紡:
鎶借薄宸ュ巶妯″紡涓昏佺敤浜庡壋寤虹浉鍏沖硅薄鐨勫舵棌銆傚綋涓涓浜у搧鏃忎腑闇瑕佽璁捐″湪涓璧峰伐浣滄椂錛岄氳繃鎶借薄宸ュ巶妯″紡錛岃兘澶熶繚璇佸㈡埛絝濮嬬粓鍙浣跨敤鍚屼竴涓浜у搧鏃忎腑鐨勫硅薄:騫朵笖閫氳繃闅旂誨叿浣撶被鐨勭敓鎴愶紝浣垮緱瀹㈡埛絝涓嶉渶瑕佹槑紜鎸囧畾鍏蜂綋鐢熸垚綾;鎵鏈夌殑鍏蜂綋宸ュ巶閮藉疄鐜頒簡鎶借薄宸ュ巶涓瀹氫箟鐨勫叕鍏辨帴鍙o紝鍥犳ゅ彧闇瑕佹敼鍙樺叿浣撳伐鍘傜殑瀹炰緥錛屽氨鍙浠ュ湪鏌愮嶇▼搴︿笂鏀瑰彉鏁翠釜杞浠剁郴緇熺殑琛屼負銆
浣嗚ユā寮忕殑緙虹偣鍦ㄤ簬娣誨姞鏂扮殑琛屼負鏃舵瘮杈冮夯鐑︼紝濡傛灉闇瑕佹坊鍔犱竴涓鏂頒駭鍝佹棌瀵硅薄鏃訛紝闇瑕佹洿鏀規帴鍙e強鍏朵笅鎵鏈夊瓙綾伙紝榪欏繀鐒朵細甯︽潵寰堝ぇ鐨勯夯鐑︺
3銆佸壋寤哄瀷-寤洪犺呮ā寮:
寤洪犺呮ā寮忓皢澶嶆潅浜у搧鐨勫壋寤烘ラゅ垎瑙e湪鍦ㄤ笉鍚岀殑鏂規硶涓浣垮緱鍒涘緩榪囩▼鏇村姞娓呮櫚錛屼粠鑰屾洿綺劇『鎺у埗澶嶆潅瀵硅薄鐨勪駭鐢熻繃紼;閫氳繃闅旂誨嶆潅瀵硅薄鐨勬瀯寤轟笌浣跨敤錛屼篃灝辨槸灝嗕駭鍝佺殑鍒涘緩涓庝駭鍝佹湰韜鍒嗙誨紑鏉ワ紝浣垮緱鍚屾牱鐨勬瀯寤鴻繃紼嬪彲浠ュ壋寤轟笉鍚岀殑瀵硅薄;騫朵笖姣忎釜鍏蜂綋寤洪犺呴兘鐩鎬簰鐙絝嬶紝鍥犳ゅ彲浠ュ緢鏂逛究鍦版浛鎹㈠叿浣撳緩閫犺呮垨澧炲姞鏂扮殑鍏蜂綋寤洪犺咃紝鐢ㄦ埛浣跨敤涓嶅悓鐨勫叿浣撳緩閫犺呭嵆鍙寰楀埌涓嶅悓鐨勪駭鍝佸硅薄銆
4銆佸壋寤哄瀷-鍗曚緥妯″紡
鍗曚緥妯″紡鍙浠ョ『淇濈郴緇熶腑鏌愪釜綾誨彧鏈変竴涓瀹炰緥錛岃ョ被鑷琛屽疄渚嬪寲騫跺悜鏁翠釜緋葷粺鎻愪緵榪欎釜瀹炰緥鐨勫叕鍏辮塊棶鐐癸紝闄や簡璇ュ叕鍏辮塊棶鐐癸紝涓嶈兘閫氳繃鍏朵粬閫斿緞璁塊棶璇ュ疄渚嬨傚崟渚嬫ā寮忕殑浼樼偣鍦ㄤ簬:緋葷粺涓鍙瀛樺湪涓涓鍏辯敤鐨勫疄渚嬪硅薄錛屾棤闇棰戠箒鍒涘緩鍜岄攢姣佸硅薄錛岃妭綰︿簡緋葷粺璧勬簮錛屾彁楂樼郴緇熺殑鎬ц兘鍙浠ヤ弗鏍兼帶鍒跺㈡埛鎬庝箞鏍蜂互鍙婁綍鏃惰塊棶鍗曚緥瀵硅薄銆傚崟渚嬫ā寮忕殑鍐欐硶鏈夊ソ鍑犵嶏紝涓昏佹湁涓夌:鎳掓眽寮忓崟渚嬨侀タ奼夊紡鍗曚緥銆佺櫥璁板紡鍗曚緥銆
5銆佸壋寤哄瀷-鍘熷瀷妯″紡:
鍦 Java 涓錛屽師鍨嬫ā寮忕殑鏍稿績鏄灝辨槸鍘熷瀷綾 Prototype,Prototype綾婚渶瑕佸叿澶囦互涓嬩袱涓鏉′歡:瀹炵幇 Cloneable 鎺ュ彛:
閲嶅啓 Object 綾諱腑鐨 clone() 鏂規硶錛岀敤浜庤繑鍥炲硅薄鐨勬嫹璐;Object 綾諱腑鐨 clone() 鏂規硶榛樿ゆ槸嫻呮嫹璐濓紝濡傛灉鎯寵佹繁鎷瘋礉瀵硅薄錛屽垯闇瑕佸湪 clone() 鏂規硶涓鑷瀹氫箟鑷宸辯殑澶嶅埗閫昏緫銆傛祬澶嶅埗:灝嗕竴涓瀵硅薄澶嶅埗鍚庯紝鍩烘湰鏁版嵁綾誨瀷鐨勫彉閲忎細閲嶆柊鍒涘緩錛岃屽紩鐢ㄧ被鍨嬫寚鍚戠殑榪樻槸鍘熷硅薄鎵鎸囧悜鐨勫唴瀛樺湴鍧銆傛繁澶嶅埗:灝嗕竴涓瀵硅薄澶嶅埗鍚庯紝涓嶈烘槸鍩烘湰鏁版嵁綾誨瀷榪樻湁寮曠敤綾誨瀷錛岄兘鏄閲嶆柊鍒涘緩鐨勩
浣跨敤鍘熷瀷妯″紡榪涜屽壋寤哄硅薄涓嶄粎綆鍖栧硅薄鐨勫壋寤烘ラわ紝榪樻瘮new 鏂瑰紡鍒涘緩瀵硅薄鐨勬ц兘瑕佸ソ鐨勫氾紝鍥犱負 Object 綾葷殑clone() 鏂規硶鏄涓涓鏈鍦版柟娉曪紝鐩存帴鎿嶄綔鍐呭瓨涓鐨勪簩榪涘埗嫻佺壒鍒鏄澶嶅埗澶у硅薄鏃訛紝鎬ц兘鐨勫樊鍒闈炲父鏄庢樉
6.緇撴瀯鍨-閫傞厤鍣ㄦā寮
閫傞厤鍣ㄦā寮忎富瑕佺敤浜庡皢涓涓綾繪垨鑰呮帴鍙h漿鍖栨垚瀹㈡埛絝甯屾湜鐨勬牸寮忥紝浣垮緱鍘熸湰涓嶅吋瀹圭殑綾誨彲浠ュ湪涓璧峰伐浣滐紝灝嗙洰鏍囩被鍜岄傞厤鑰呯被瑙h;鍚屾椂涔熺﹀悎鈥滃紑闂鍘熷垯鈥濓紝鍙浠ュ湪涓嶄慨鏀瑰師浠g爜鐨勫熀紜涓婂炲姞鏂扮殑閫傞厤鍣ㄧ被;灝嗗叿浣撶殑瀹炵幇灝佽呭湪閫傞厤鑰呯被涓錛屽逛簬瀹㈡埛絝綾繪潵璇存槸閫忔槑鐨勶紝鑰屼笖鎻愰珮浜嗛傞厤鑰呯殑澶嶇敤鎬э紝浣嗘槸緙虹偣鍦ㄤ簬鏇存崲閫傞厤鍣ㄧ殑瀹炵幇榪囩▼姣旇緝澶嶆潅銆
鎵浠ワ紝閫傞厤鍣ㄦā寮忔瘮杈冮傚悎浠ヤ笅鍦烘櫙:
(1)緋葷粺闇瑕佷嬌鐢ㄧ幇鏈夌殑綾伙紝鑰岃繖浜涚被鐨勬帴鍙d笉絎﹀悎緋葷粺鐨勬帴
(2)浣跨敤絎涓夋柟緇勪歡錛岀粍浠舵帴鍙e畾涔夊拰鑷宸卞畾涔夌殑涓嶅悓錛屼笉甯屾湜淇鏀硅嚜宸辯殑鎺ュ彛錛屼絾鏄瑕佷嬌鐢ㄧ涓夋柟緇勪歡鎺ュ彛鐨勫姛鑳姐
7銆佺粨鏋勫瀷-瑁呴グ鍣ㄦā寮:
瑁呴グ鍣ㄦā寮忓彲浠ュ姩鎬佺粰瀵硅薄娣誨姞涓浜涢濆栫殑鑱岃矗浠庤屽疄鐜板姛鑳界殑鎷撳睍錛屽湪榪愯屾椂閫夋嫨涓嶅悓鐨勮呴グ鍣錛屼粠鑰屽疄鐜頒笉鍚岀殑琛屼負;姣斾嬌鐢ㄧ戶鎵挎洿鍔犵伒媧伙紝閫氳繃瀵逛笉鍚岀殑瑁呴グ綾昏繘琛屾帓鍒楃粍鍚堬紝鍒涢犲嚭寰堝氫笉鍚岃屼負錛屽緱鍒板姛鑳芥洿涓哄己澶х殑瀵硅薄;絎﹀悎鈥滃紑闂鍘熷垯鈥濓紝琚瑁呴グ綾諱笌瑁呴グ綾葷嫭絝嬪彉鍖栵紝鐢ㄦ埛鍙浠ユ牴鎹闇瑕佸炲姞鏂扮殑瑁呴グ綾誨拰琚瑁呴グ綾伙紝鍦ㄤ嬌鐢ㄦ椂鍐嶅瑰叾榪涜岀粍鍚堬紝鍘熸湁浠g爜鏃犻』鏀瑰彉銆
浣嗘槸瑁呴グ鍣ㄦā寮忎篃瀛樺湪緙虹偣錛岄栧厛浼氫駭鐢熷緢澶氱殑灝忓硅薄澧炲姞浜嗙郴緇熺殑澶嶆潅鎬э紝絎浜屾槸鎺掗敊姣旇緝鍥伴毦錛屽逛簬澶氭¤呴グ鐨勫硅薄錛岃皟璇曟椂瀵繪壘閿欒鍙鑳介渶瑕侀愮駭鎺掓煡錛岃緝涓虹儲鐞愩
8銆佺粨鏋勫瀷-浠g悊妯″紡:
浠g悊妯″紡鐨勮捐″姩鏈烘槸閫氳繃浠g悊瀵硅薄鏉ヨ塊棶鐪熷疄瀵硅薄錛岄氳繃寤虹珛涓涓瀵硅薄浠g悊綾伙紝鐢變唬鐞嗗硅薄鎺у埗鍘熷硅薄鐨勫紩鐢錛屼粠鑰屽疄鐜板圭湡瀹炲硅薄鐨勬搷浣溿傚湪浠g悊妯″紡涓錛屼唬鐞嗗硅薄涓昏佽搗鍒頒竴涓涓浠嬬殑浣滅敤錛岀敤浜庡崗璋冧笌榪炴帴璋冪敤鑰(鍗沖㈡埛絝)鍜岃璋冪敤鑰(鍗崇洰鏍囧硅薄)錛屽湪涓瀹氱▼搴︿笂闄嶄綆浜嗙郴緇熺殑鑰﹀悎搴︼紝鍚屾椂涔熶繚鎶や簡鐩鏍囧硅薄銆備絾緙虹偣鏄鍦ㄨ皟鐢ㄨ呬笌琚璋冪敤鑰呬箣闂村炲姞浜嗕唬鐞嗗硅薄錛屽彲鑳戒細閫犳垚璇鋒眰鐨勫勭悊閫熷害鍙樻參銆
9銆佺粨鏋勫瀷-妗ユ帴妯″紡:
妗ユ帴妯″紡灝嗙郴緇熺殑鎶借薄閮ㄥ垎涓庡疄鐜伴儴鍒嗗垎紱昏В鑰︼紝浣誇粬浠鍙浠ョ嫭絝嬬殑鍙樺寲銆備負浜嗚揪鍒拌╂娊璞¢儴鍒嗗拰瀹炵幇閮ㄥ垎鐙絝嬪彉鍖栫殑鐩鐨勶紝妗ユ帴妯″紡浣跨敤緇勫悎鍏崇郴鏉ヤ唬鏇跨戶鎵垮叧緋伙紝鎶借薄閮ㄥ垎鎷ユ湁瀹炵幇閮ㄥ垎鐨勬帴鍙e硅薄錛屼粠鑰岃兘澶熼氳繃榪欎釜鎺ュ彛瀵硅薄鏉ヨ皟鐢ㄥ叿浣撳疄鐜伴儴鍒嗙殑鍔熻兘銆備篃灝辨槸璇達紝妗ユ帴妯″紡涓鐨勬ˉ鎺ユ槸涓涓鍗曟柟鍚戠殑鍏崇郴錛屽彧鑳藉熸娊璞¢儴鍒嗗幓浣跨敤濂栫幇閮ㄥ垎鐨勫硅薄錛岃屼笉鑳藉弽榪囨潵銆
妗ユ帴妯″紡絎﹀悎鈥滃紑闂鍘熷垯鈥濓紝鎻愰珮浜嗙郴緇熺殑鍙鎷撳睍鎬э紝鍦ㄤ袱涓鍙樺寲緇村害涓浠繪剰鎵╁睍涓涓緇村害錛岄兘涓嶉渶瑕佷慨鏀瑰師鏉ョ殑緋葷粺:騫朵笖瀹炵幇緇嗚妭瀵瑰㈡埛涓嶉忔槑錛屽彲浠ラ殣鈃忓疄鐜扮粏鑺傘備絾鏄鐢變簬鑱氬悎鍏崇郴寤虹珛鍦ㄦ娊璞″眰錛岃佹眰寮鍙戣呴拡瀵規娊璞¤繘琛岀紪紼嬶紝榪欏炲姞緋葷粺鐨勭悊瑙e拰璁捐¢毦搴︺
10銆佺粨鏋勫瀷-澶栬傛ā寮:
瑙傛ā寮忛氳繃瀵瑰㈡埛絝鎻愪緵涓涓緇熶竴鐨勬帴鍙o紝鐢ㄤ簬璁塊棶瀛愮郴緇熶腑鐨勪竴緹ゆ帴鍙c備嬌鐢ㄥ栬傛ā寮忔湁浠ヤ笅鍑犵偣濂藉:
(1)鏇村姞鏄撶敤:浣垮緱瀛愮郴緇熸洿鍔犳槗鐢錛屽㈡埛絝涓嶅啀闇瑕佷簡瑙e瓙緋葷粺鍐呴儴鐨勫疄鐜幫紝涔熶笉闇瑕佽窡浼楀氬瓙緋葷粺鍐呴儴鐨勬ā鍧楄繘琛屼氦浜掞紝鍙闇瑕佽窡澶栬傜被浜や簰灝卞彲浠ヤ簡;
(2)鏉炬暎鑰﹀悎:灝嗗㈡埛絝涓庡瓙緋葷粺瑙h︼紝璁╁瓙緋葷粺鍐呴儴鐨勬ā鍧楄兘鏇村規槗鎵╁睍鍜岀淮鎶ゃ
(3)鏇村ソ鐨勫垝鍒嗚塊棶灞傛: 閫氳繃鍚堢悊浣跨敤 Facade錛屽彲浠ユ洿濂藉湴鍒掑垎璁塊棶鐨勫眰嬈★紝鏈変簺鏂規硶鏄瀵圭郴緇熷栫殑錛屾湁浜涙柟娉曟槸緋葷粺鍐呴儴浣跨敤鐨勩傛妸闇瑕佹毚闇茬粰澶栭儴鐨勫姛鑳介泦涓鍒伴棬闈涓錛岃繖鏍鋒棦鏂逛究瀹㈡埛絝浣跨敤錛屼篃寰堝ソ鍦伴殣鈃忎簡鍐呴儴鐨勭粏鑺傘
11銆佺粨鏋勫瀷-緇勫悎妯″紡:
緇勫悎妯″紡灝嗗彾瀛愬硅薄鍜屽瑰櫒瀵硅薄榪涜岄掑綊緇勫悎錛屽艦鎴愭爲褰㈢粨鏋勪互琛ㄧず鈥滈儴鍒-鏁翠綋鈥濈殑灞傛$粨鏋勶紝浣垮緱鐢ㄦ埛瀵瑰崟涓瀵硅薄鍜岀粍鍚堝硅薄鐨勪嬌鐢ㄥ叿鏈変竴鑷存э紝鑳藉熷儚澶勭悊鍙跺瓙瀵硅薄涓鏍鋒潵澶勭悊緇勫悎瀵硅薄錛屾棤闇榪涜屽尯鍒嗭紝浠庤屼嬌鐢ㄦ埛紼嬪簭鑳藉熶笌澶嶆潅鍏冪礌鐨勫唴閮ㄧ粨鏋勮繘琛岃В鑰︺
緇勫悎妯″紡鏈鍏抽敭鐨勫湴鏂規槸鍙跺瓙瀵硅薄鍜岀粍鍚堝硅薄瀹炵幇浜嗙浉鍚岀殑鎶借薄鏋勫緩綾伙紝瀹冩棦鍙琛ㄧず鍙跺瓙瀵硅薄錛屼篃鍙琛ㄧず瀹瑰櫒瀵硅薄錛屽㈡埛浠呬粎闇瑕侀拡瀵硅繖涓鎶借薄鏋勫緩綾昏繘琛岀紪紼嬶紝榪欏氨鏄緇勫悎妯″紡鑳藉熷皢鍙跺瓙鑺傜偣鍜屽硅薄鑺傜偣榪涜屼竴鑷村勭悊鐨勫師鍥犮
12銆佺粨鏋勫瀷-浜鍏冩ā寮:
浜鍏冩ā寮忛氳繃鍏變韓鎶鏈鏈夋晥鍦版敮鎸佺粏綺掑害銆佺姸鎬佸彉鍖栧皬鐨勫硅薄澶嶇敤錛屽綋緋葷粺涓瀛樺湪鏈夊氫釜鐩稿悓鐨勫硅薄錛岄偅涔堝彧鍏變韓涓浠戒笉蹇呮瘡涓閮藉幓瀹炰緥鍖栦竴涓瀵硅薄錛屾瀬澶у湴鍑忓皯緋葷粺涓瀵硅薄鐨勬暟閲忥紝浠庤岃妭鐪佽祫婧愩
浜鍏冩ā寮忕殑鏍稿績鏄浜鍏冨伐鍘傜被錛屼韓鍏冨伐鍘傜被緇存姢浜嗕竴涓瀵硅薄瀛樺偍奼狅紝褰撳㈡埛絝闇瑕佸硅薄鏃訛紝棣栧厛浠庝韓鍏冩睜涓鑾峰彇錛屽傛灉浜鍏冩睜涓瀛樺湪瀵硅薄瀹炰緥鍒欑洿鎺ヨ繑鍥烇紝濡傛灉浜鍏冩睜涓涓嶅瓨鍦錛屽垯鍒涘緩涓涓鏂扮殑浜鍏冨硅薄瀹炰緥榪斿洖緇欑敤鎴鳳紝騫跺湪浜鍏冩睜涓淇濆瓨璇ユ柊澧炲硅薄錛岃繖鐐規湁浜涘崟渚嬬殑鎰忔濄
宸ュ巶綾婚氬父浼氫嬌鐢ㄩ泦鍚堢被鍨嬫潵淇濆瓨瀵硅薄錛屽 HashMap銆丠ashtable銆乂ector 絳夌瓑錛屽湪 Java 涓錛屾暟鎹搴撹繛鎺ユ睜銆佺嚎紼嬫睜絳夐兘鏄鐢ㄤ韓鍏冩ā寮忕殑搴旂敤銆
Ⅳ Java程序設計中工廠設計模式思想是怎樣的
工廠模式主要用一下幾種形態:
1:簡單工廠(Simple Factory)。
2:工廠方法(Factory Method)。
3:抽象工廠(Abstract Factory)。
簡單工廠並不簡單,它是整個模式的核心,一旦他出了問題,整個模式都將受影響而不能工作,為了降低風險和為日後的維護、擴展做准備,我們需要對它進行重構,引入工廠方法。工廠方法為工廠類定義了介面,用多態來削弱了工廠類的職能。
工廠方法和簡單工廠的主要區別是,簡單工廠是把創建產品的職能都放在一個類裡面,而工廠方法則把不同的產品放在實現了工廠介面的不同工廠類裡面,這樣就算其中一個工廠類出了問題,其他工廠類也能正常工作,互相不受影響,以後增加新產品,也只需要新增一個實現工廠介面工廠類,就能達到,不用修改已有的代碼。但工廠方法也有他局限的地方,那就是當面對的產品有復雜的等級結構的時候
抽象工廠的意圖在於創建一系列互相關聯或互相依賴的對象。