多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > java語言實現創建型模式―簡單工廠模式

java語言實現創建型模式―簡單工廠模式

來源:程序員人生   發布時間:2015-05-25 08:57:32 閱讀次數:3275次

1、描寫

簡單工廠模式又名靜態工廠方法模式,是所有工廠模式中最簡單的1個,它定義1個具體的工廠類來負責創建所有類的對象并初始化創建的對象,它主要由3部份組成:工廠類、抽象類、實現抽象類的具體類,然后通過客戶端調用工廠類創建相應的對象。

注意:簡單工廠模式不屬于GoF總結的23種設計模式,它是相當于初學java的HelloWorld案例,幫助初學者了解設計模式,增長信心的1個設計模式。


2、簡單工廠模式的優缺點

優點:相對直接在客戶端創建對象并初始化對象的值來講,簡單工廠模式將創建對象和初始化任務交給了工廠類,客戶端只負責對對象的調用,從而明確了各個類的職責。

缺點:只使用1個工廠類來創建各具特點的所有類,當具體產品的種類不斷增加,對創建的方式有所改變時就需要對這個工廠類進行不斷的改變,增加相應的判斷,增加相應的類的創建邏輯,致使工廠類的代碼愈來愈龐大,不利于后期的保護。另外,簡單工廠模式使用靜態方法來創建對象,這樣就致使這個創建對象的靜態方法不能被繼承,只能在這1個類里變得愈來愈臃腫。

總結:雖然簡單工廠模式將對象的創建和初始化工作與客戶端分離了,實現了責任的分配策略,但是所有對象的創建和初始化工作都集中到了1個具體的工廠類中,如果要創建的對象種類繁多,這個工廠類將非常龐大,不利于后期保護。


3、源代碼

1、抽象類

package tong.day4_30.introduce; /** * 定義1個薪資接口,所有公司的具體薪資計算都實現這個接口,并重寫計算薪資的方法computeSalary() * @author tong * */ public interface Salary { public void computeSalary(); }
2、具體類
package tong.day4_30.introduce; /** * 廣東分公司的薪資計算類實現了Salary接口,并重寫了該接口中的計算薪資的方法computeSalary() * @author Administrator * */ public class GuangdongSalary implements Salary { @Override public void computeSalary() { System.out.println("廣東分公司薪資計算"); } }

package tong.day4_30.introduce; /** * 河北公司的薪資計算類實現了Salary接口,并重寫了該接口中的計算薪資的方法computeSalary() * @author tong * */ public class HebeiSalary implements Salary{ @Override public void computeSalary() { System.out.println("河北分公司薪資計算"); } }

package tong.day4_30.introduce; /** * 浙江分公司的薪資計算類實現了Salary接口,并重寫了該接口中的計算薪資的方法computeSalary() * @author Administrator * */ public class ZhejiangSalary implements Salary { @Override public void computeSalary() { System.out.println("浙江分公司薪資計算"); } }
3、簡單工廠類
package tong.day4_30.introduce; /** * 簡單工廠類負責所有對象的創建和對象的初始化,這里采取java中的反射機制,根據傳入的參數來創建類的對象 * @author tong * */ public class SimpleFactory { //根據參數創建對象,這是1個靜態方法可以直接使用類名調用 public static Salary createSalary(String name) { Class<Salary> clazz = null; Salary salary = null; try { //利用反射機制獲得該參數對應的類的對象 clazz = (Class<Salary>) Class.forName(name); //使用此類對象創建對應的薪資類對象,這里使用父類指針指向子類對象,實現了多態 salary = (Salary)clazz.newInstance(); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } return salary; } }
4、客戶端調用
package tong.day4_30.introduce; /** * 在客戶端調用工廠類創建薪資的方法,并輸出結果; * 如果還想創建更多的公司薪資,那末就創建1個相應的類,在Client對象中傳入相應的參數創建相應的對象便可 * @author tong * */ public class Client { public static void main(String[] args) { //創建Client對象,以此對象調用computeSalary()方法傳入要類型參數 new Client().computeSalary("tong.day4_30.introduce.HebeiSalary"); new Client().computeSalary("tong.day4_30.introduce.ZhejiangSalary"); new Client().computeSalary("tong.day4_30.introduce.GuangdongSalary"); } /** * 根據傳入的參數調用工廠類的創建薪資方法,創建不同的薪資對象 * @param name */ public void computeSalary(String name) { //這里使用多態,根據傳入參數的不同,生成ZhejiangSalary或HebeiSalary對象 Salary salary = SimpleFactory.createSalary(name); //使用生成的對象動態調用具體類對象的方法 salary.computeSalary(); } }

4、運行結果

簡單工廠模式

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 手机一级片 | 亚洲色中文字幕在线播放 | 第一福利网站 | 成人国产日本亚洲精品 | 欧美经典剧情系列h版在线观看 | 特一级黄色毛片 | 国产亚洲欧美另类久久久 | 亚洲一区在线视频 | 国产成人精选免费视频 | 久久中文字幕综合不卡一二区 | 欧美老女人性视频 | 亚洲最色网站 | 亚洲国产成人精品青青草原100 | 婷婷夜夜躁天天躁人人躁 | free性video18| 亚洲国产欧美视频 | 亚洲国产综合网 | 91久久精品国产免费一区 | 日韩欧美国产中文字幕 | 午夜精品久久久久久久第一页 | 欧美日韩国产高清 | 日韩精品成人a在线观看 | japanese17一18sex日本护士 | 欧美精品播放 | 久久性生大片免费观看性 | 亚洲国产精品自在在线观看 | 欧美日韩亚洲一区 | 男女晚上日日麻批视频不挡 | 中文字幕欧美亚洲 | 看亚洲色图| 欧美精品xxxxx | 精品日韩欧美一区二区三区 | 伊人免费在线观看 | 亚洲综合欧美 | 福利网站在线 | 波多野结衣中文字幕在线 | 最近最新的中文字幕大全3 最近最新高清免费中文字幕 | 91精品成人免费国产片 | 好好的日视频www | 国产免费高清福利拍拍拍 | 成人自拍视频在线观看 |