【正文】
r e t e P r o d u c t ( ) 。 工廠方法模式 ? 模式動機 ? 現(xiàn)在對該系統(tǒng)進行修改,不再設(shè)計一個按鈕工廠類來統(tǒng)一負責(zé)所有產(chǎn)品的創(chuàng)建,而是 將具體按鈕的創(chuàng)建過程交給專門的工廠子類去完成 ,我們 先定義一個抽象的按鈕工廠類 , 再定義具體的工廠類來生成圓形按鈕、矩形按鈕、菱形按鈕等 ,它們實現(xiàn)在抽象按鈕工廠類中定義的方法。 簡單工廠模式最大的缺點是當(dāng)有新產(chǎn)品要加入到系統(tǒng)中時,必須修改工廠類,加入必要的處理邏輯,這違背了“開閉原則”。 在簡單工廠模式中,所有的產(chǎn)品都是由同一個工廠創(chuàng)建,工廠類職責(zé)較重,業(yè)務(wù)邏輯較為復(fù)雜,具體產(chǎn)品與工廠類之間的耦合度高,嚴(yán)重影響了系統(tǒng)的靈活性和擴展性,而工廠方法模式則可以很好地解決這一問題。這種抽象化的結(jié)果使這種結(jié)構(gòu) 可以在不修改具體工廠類的情況下引進新的產(chǎn)品 ,如果出現(xiàn)新的按鈕類型,只需要為這種新類型的按鈕創(chuàng)建一個具體的工廠類就可以獲得該新按鈕的實例,這一特點無疑使得工廠方法模式具有超越簡單工廠模式的優(yōu)越性, 更加符合“開閉原則” 。 cr e a t e ConcreteProd uctProductConcreteF actory+ factoryMethod ()...: ProductFactory+ factoryMethod ()...: Product工廠方法模式 ?模式結(jié)構(gòu) ?工廠方法模式包含如下角色: ? Product:抽象產(chǎn)品 ? ConcreteProduct:具體產(chǎn)品 ? Factory:抽象工廠 ? ConcreteFactory:具體工廠 工廠方法模式 ?模式分析 ? 工廠方法模式是簡單工廠模式的進一步抽象和推廣。 工廠方法模式 ?模式分析 ? 當(dāng)系統(tǒng)擴展需要添加新的產(chǎn)品對象時,僅僅需要添加一個具體產(chǎn)品對象以及一個具體工廠對象,原有工廠對象不需要進行任何修改,也不需要修改客戶端, 很好地符合了“開閉原則” 。 } 抽象工廠類 工廠方法模式 ? 模式分析 ? 具體工廠類代碼: public class CashPayFactory extends PayMethodFactory { public AbstractPay getPayMethod() { return new CashPay()。 factory=new CashPayFactory()。 ?xml version=? config classNameCashPayFactory/className /config 工廠方法模式 ? 模式分析 ? Java反射 (Java Reflection): ? 是指 在程序運行時獲取已知名稱的類或已有對象的相關(guān)信息的一種機制 ,包括類的方法、屬性、超類等信息,還包括實例的創(chuàng)建和實例類型的判斷等。 return obj。 doc = (new File())。 //通過類名生成實例對象并將其返回 Class c=(cName)。 AbstractPay payMethod。 工廠方法模式 ?模式實例與解析 ?實例一:電視機工廠 ? 將原有的工廠進行分割,為每種品牌的電視機提供一個子工廠,海爾工廠專門負責(zé)生產(chǎn)海爾電視機,海信工廠專門負責(zé)生產(chǎn)海信電視機,如果需要生產(chǎn) TCL電視機或創(chuàng)維電視機,只需要對應(yīng)增加一個新的 TCL工廠或創(chuàng)維工廠即可,原有的工廠無須做任何修改,使得整個系統(tǒng)具有更加的靈活性和可擴展性。 工廠方法模式 ?模式實例與解析 ?實例二:日志記錄器 cr e a t e cr e a t e ......r