簡單工廠模式的概念
就是建立一個(gè)工廠類,對(duì)實(shí)現(xiàn)了同一接口的一些類進(jìn)行實(shí)例的創(chuàng)建。簡單工廠模式的實(shí)質(zhì)是由一個(gè)工廠類根據(jù)傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類(這些產(chǎn)品類繼承自一個(gè)父類或接口)的實(shí)例。 
簡單工廠模式的UML圖 

簡單工廠模式代碼
學(xué)習(xí)簡單工廠模式的時(shí)候我用的是一個(gè)與人類有相關(guān)的例子。人類在世界分為男人和女人,首先定義一個(gè)Human產(chǎn)品的抽象接口 
/** * This is factory patter package */package com.roc.factory;/** * 產(chǎn)品的抽象接口 人類 * @author liaowp * */public interface Human {  public void say();}然后定義男人和女人,同樣都有說話的方法。
/** * This is factory patter package */package com.roc.factory;/** * man 男人 * @author liaowp * */public class Man implements Human { /* say method * @see com.roc.factory.Human#say() */ @Override public void say() { System.out.println("男人"); }}/** * This is factory patter package */package com.roc.factory;/**女人 * @author liaowp * */public class Woman implements Human { /* say method * @see com.roc.factory.Human#say() */ @Override public void say() { System.out.println("女人"); }}最后寫一個(gè)工廠類,用來創(chuàng)造男人和女人。第一種方式是使用邏輯判斷的方式實(shí)現(xiàn)的。
package com.roc.factory;/** * 簡單工廠 * @author liaowp * */public class SampleFactory { public static Human makeHuman(String type){ if(type.equals("man")){  Human man = new Man();  return man; }else if(type.equals("womman")){  Human woman = new Woman();  return woman; }else{  System.out.println("生產(chǎn)不出來");  return null; }   }}第二方式是使用java的放射實(shí)現(xiàn)的,我覺得這一類的實(shí)現(xiàn)方式比較好。
package com.roc.factory;/** * 簡單工廠放射實(shí)現(xiàn) * @author liaowp * */public class SampleFactory1 { public static Human makeHuman(Class c){ Human human = null; try {  human = (Human) Class.forName(c.getName()).newInstance(); } catch (InstantiationException e) {  // TODO Auto-generated catch block  System.out.println("不支持抽象類或接口");  e.printStackTrace(); } catch (IllegalAccessException e) {  // TODO Auto-generated catch block  e.printStackTrace();  System.out.println("沒有足夠權(quán)限,即不能訪問私有對(duì)象"); } catch (ClassNotFoundException e) {  // TODO Auto-generated catch block  System.out.println("類不存在");  e.printStackTrace(); }  return human; }}最后是客戶端的代碼
package com.roc.factory;/** * 簡單工廠測試 * @author liaowp * */public class Client { public static void main(String[] args) {// Human man = SampleFactory.makeHuman("man");// man.say();// Human womman = SampleFactory.makeHuman("womman");// womman.say();// Human test = SampleFactory.makeHuman("tttt");  Human man = SampleFactory1.makeHuman(Man.class); man.say(); Human woman = SampleFactory1.makeHuman(Woman.class); woman.say(); }}簡單工廠模式應(yīng)用場景  
優(yōu)點(diǎn):工廠類是整個(gè)模式的關(guān)鍵.包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類的對(duì)象.通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對(duì)象的尷尬局面擺脫出來,僅僅需要負(fù)責(zé)“消費(fèi)”對(duì)象就可以了。而不必管這些對(duì)象究竟如何創(chuàng)建及如何組織的.明確了各自的職責(zé)和權(quán)利,有利于整個(gè)軟件體系結(jié)構(gòu)的優(yōu)化。
缺點(diǎn):由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時(shí)候,可能會(huì)出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實(shí)例的需求.這種對(duì)條件的判斷和對(duì)具體產(chǎn)品類型的判斷交錯(cuò)在一起,很難避免模塊功能的蔓延,對(duì)系統(tǒng)的維護(hù)和擴(kuò)展非常不利;
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選