【正文】
object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. ?Frequency of use: high 工廠方法模式 ?模式結(jié)構(gòu) r e t u r n n e w C o n c r e t e P r o d u c t ( ) 。 工廠方法模式 ? 模式分析 ? 抽象工廠類代碼: public abstract class PayMethodFactory { public abstract AbstractPay getPayMethod()。 工廠方法模式 ? 模式分析 ? 配置文件代碼: ? 在實際的應(yīng)用開發(fā)中,一般將具體工廠類的實例化過程進行改進,不直接使用 new關(guān)鍵字來創(chuàng)建對象,而是將具體類的類名寫入 配置文件中,再通過 Java的 反射機制 ,讀取 XML格式的配置文件,根據(jù)存儲在XML文件中的類名字符串生成對象。 Document doc。 工廠方法模式 ? 模式分析 ? 修改后的客戶類代碼片段: PayMethodFactory factory。Hise nse T V+ pla y ()...: void工廠方法模式 ?模式實例與解析 ?實例一:電視機工廠 ? 參考代碼 (Chapter 05 Factory Method\sample01) 演示 …… 工廠方法模式 ?模式實例與解析 ?實例二:日志記錄器 ? 某系統(tǒng)日志記錄器要求支持多種日志記錄方式,如文件記錄、數(shù)據(jù)庫記錄等,且用戶可以根據(jù)要求動態(tài)選擇日志記錄方式,現(xiàn)使用工廠方法模式設(shè)計該系統(tǒng)。 這樣,系統(tǒng)的可擴展性也就變得非常好,完全符合“開閉原則”。 //使用連接創(chuàng)建一個會話 QueueSession qSess=(false,. AUTO_ACKNOWLEDGE)。 Statement statement=()。 本章小結(jié) ? 工廠方法模式又稱為工廠模式,它屬于類創(chuàng)建型模式。 ? 工廠方法模式適用情況包括:一個類不知道它所需要的對象的類;一個類通過其子類來指定創(chuàng)建哪個對象;將創(chuàng)建對象的任務(wù)委托給多個工廠子類中的某一個,客戶端在使用時可以無須關(guān)心是哪一個工廠子類創(chuàng)建產(chǎn)品子類,需要時再動態(tài)指定。由于使用了面向?qū)ο蟮亩鄳B(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點,而且克服了它的缺點。如果有滿足要求的產(chǎn)品對象,就直接將該產(chǎn)品返回客戶端;如果集合中沒有這樣的產(chǎn)品對象,那么就創(chuàng)建一個新的滿足要求的產(chǎn)品對象,然后將這個對象在增加到集合中,再返回給客戶端。 工廠方法模式 ?模式應(yīng)用 ?(3) JDBC中的工廠方法: Connection conn=(jdbc:microsoft:alhost:1433。 ? 一個類通過其子類來指定創(chuàng)建哪個對象 :在工廠方法模式中,對于抽象工廠類只需要提供一個創(chuàng)建產(chǎn)品的接口,而由其子類來確定具體要創(chuàng)建的對象,利用面向?qū)ο蟮亩鄳B(tài)性和里氏代換原則,在程序運行時,子類對象將覆蓋父類對象,從而使得系統(tǒng)更容易擴展。 ? 基于工廠角色和產(chǎn)品角色的多態(tài)性設(shè)計是工廠方法模式的關(guān)鍵。 ()。 String cName=()。 Object obj = ()。 AbstractPay payMethod。 這個核心類僅僅負(fù)責(zé)給出具體工廠必須實現(xiàn)的接口,而不負(fù)責(zé)哪一個產(chǎn)品類被實例化這種細(xì)節(jié),這使得 工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進新產(chǎn)品 。 工廠方法模式 ? 模式動機 ? 現(xiàn)在對該系統(tǒng)進行修改,不再設(shè)計一個按鈕工廠類來統(tǒng)一負(fù)責(zé)所有產(chǎn)品