您好,登錄后才能下訂單哦!
本篇內容介紹了“java抽象工廠模式怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
抽象工廠只實現了一個 createHuman 的方法,目的是簡化實現類的代碼工作量,這個在講代碼的時候會說。這里還使用了 Jdk 1.5 的一個新特性 Enum 類型,其實這個完全可以類的靜態變量來實現,但我想既然是學習就應該學有所獲得,即使你對這個模式非常了解,也可能沒用過 Enum 類型,也算是一個不同的知識點吧,我希望給大家講解,每次都有新的技術點提出來,每個人都會有一點的收獲就足夠了,然后在具體的項目中使用時,知道有這個技術點,然后上 baidu 狗狗一下就能解決問題。
我們來看程序實現:
package com.cbf4life; /** *定義一個人類的統稱,問題出來了,剛剛定義的時候忘記定義性別了 *這個重要的問題非修改不可,否則這個世界上太多太多的東西不存在了 */ public interface Human { //首先定義什么是人類 //人是愉快的,會笑的,本來是想用smile表示,想了一下laugh更合適,好長時間沒有大笑了; public void laugh(); //人類還會哭,代表痛苦 public void cry(); //人類會說話 public void talk(); //定義性別 public void sex(); }
人類的接口定義好,然后根據接口創建三個抽象類,也就是三個產品等級,實現 laugh()、cry()、talk()三個方法,以 AbstractYellowHuman 為例:
package com.cbf4life.yellowHuman; import com.cbf4life.Human; /** *為什么要修改成抽象類呢?要定義性別呀 */ public abstract class AbstractYellowHuman implements Human { public void cry() { System.out.println("黃色人種會哭"); } public void laugh() { System.out.println("黃色人種會大笑,幸福呀!"); } public void talk() { System.out.println("黃色人種會說話,一般說的都是雙字節"); } }
其他的兩個抽象類 AbstractWhiteHuman 和 AbstractgBlackHuman 與此類似的事項方法,不再通篇拷貝代碼
三個抽象類都實現完畢了,然后就是些實現類了。其實,你說抽象類放這里有什么意義嗎?就是不允許你 new 出來一個抽象的對象唄,使用非抽象類完全就可以代替,呵呵,殺豬殺尾巴,各有各的殺法,不過既然進了 Java 這個門就要遵守 Java 這個規矩,我們看實現類:
女性黃種人的實現類:
package com.cbf4life.yellowHuman; /** *女性黃種人 */ public class YellowFemaleHuman extends AbstractYellowHuman { public void sex() { System.out.println("該黃種人的性別為女..."); } }
男性黃種人的實現類:
package com.cbf4life.yellowHuman; /** *男性黃種人 */ public class YellowMaleHuman extends AbstractYellowHuman { public void sex() { System.out.println("該黃種人的性別為男...."); } }
同理可知,女性白種人,男性白種人,女性黑種人,男性黑種人都是對性別的實現。
抽象工廠模式下的產品等級和產品族都已經完成,也就是人類以及產生出的人類是什么樣子的都已經定義好了,下一步就等著工廠開工創建了,那我們來看工廠類。在看工廠類之前我們先看那個枚舉類型,這個是很有意思的
package com.cbf4life; /** *世界上有哪些類型的人,列出來 *JDK 1.5開始引入enum類型也是目的的,吸引C程序員轉過來 */ public enum HumanEnum { //把世界上所有人類型都定義出來 YelloMaleHuman("com.cbf4life.yellowHuman.YellowMaleHuman"), YelloFemaleHuman("com.cbf4life.yellowHuman.YellowFemaleHuman"), WhiteFemaleHuman("com.cbf4life.whiteHuman.WhiteFemaleHuman"), WhiteMaleHuman("com.cbf4life.whiteHuman.WhiteMaleHuman"), BlackFemaleHuman("com.cbf4life.blackHuman.BlackFemaleHuman"), BlackMaleHuman("com.cbf4life.blackHuman.BlackMaleHuman"); private String value = ""; //定義構造函數,目的是Data(value)類型的相匹配 private HumanEnum(String value){ this.value = value; } public String getValue(){ return this.value; } }
然后,我們看我們的工廠類,先看接口:
package com.cbf4life; /** *這次定一個接口,應該要造不同性別的人,需要不同的生產線 *那這個八卦爐必須可以制造男人和女人 */ public interface HumanFactory { //制造黃色人種 public Human createYellowHuman(); //制造一個白色人種 public Human createWhiteHuman(); //制造一個黑色人種 public Human createBlackHuman(); } 然后看抽象類: package com.cbf4life.humanFactory; import com.cbf4life.Human; import com.cbf4life.HumanEnum; import com.cbf4life.HumanFactory; public abstract class AbstractHumanFactory implements HumanFactory { /* *給定一個性別人種,創建一個人類出來 專業術語是產生產品等級 */ protected Human createHuman(HumanEnum humanEnum) { Human human = null; //如果傳遞進來不是一個Enum中具體的一個Element的話,則不處理 if (!humanEnum.getValue().equals("")) { try { //直接產生一個實例 human = (Human) Class.forName(humanEnum.getValue()).newInstance(); } catch (Exception e) { //因為使用了enum,這個種異常情況不會產生了,除非你的enum有問題; e.printStackTrace(); } }//if結束 return human; } }
看到沒,這就是引入 enum 的好處,createHuman(HumanEnum humanEnum)這個方法定義了輸入參數必須是 HumanEnum 類型,然后直接使用 humanEnum.getValue()方法就能獲得具體傳遞進來的值,這個不多說了,
大家自己看程序領會,沒多大難度,這個抽象類的目的就是減少下邊實現類的代碼量,我們看實現類:
男性工廠,只創建男性:
package com.cbf4life.humanFactory; import com.cbf4life.Human; import com.cbf4life.HumanEnum; /** *男性創建工廠 */ public class MaleHumanFactory extends AbstractHumanFactory { //創建一個男性黑種人 public Human createBlackHuman() { return super.createHuman(HumanEnum.BlackMaleHuman); } //創建一個男性白種人 public Human createWhiteHuman() { return super.createHuman(HumanEnum.WhiteMaleHuman); } //創建一個男性黃種人 public Human createYellowHuman() { return super.createHuman(HumanEnum.YelloMaleHuman); } }
女性工廠,只創建女性:
package com.cbf4life.humanFactory; import com.cbf4life.Human; import com.cbf4life.HumanEnum; /** *女性創建工廠 */ public class FemaleHumanFactory extends AbstractHumanFactory { //創建一個女性黑種人 public Human createBlackHuman() { return super.createHuman(HumanEnum.BlackFemaleHuman); } //創建一個女性白種人 public Human createWhiteHuman() { return super.createHuman(HumanEnum.WhiteFemaleHuman); } //創建一個女性黃種人 public Human createYellowHuman() { return super.createHuman(HumanEnum.YelloFemaleHuman); } }
產品定義好了,工廠也定義好了,萬事俱備只欠東風,那咱就開始造吧,哦,不對,女媧開始造人了
public class NvWa { public static void main(String[] args) { //第一條生產線,男性生產線 HumanFactory maleHumanFactory = new MaleHumanFactory(); //第二條生產線,女性生產線 HumanFactory femaleHumanFactory = new FemaleHumanFactory(); //生產線建立完畢,開始生產人了: Human maleYellowHuman = maleHumanFactory.createYellowHuman(); Human femaleYellowHuman = femaleHumanFactory.createYellowHuman(); maleYellowHuman.cry(); maleYellowHuman.laugh(); femaleYellowHuman.sex(); /* *..... *后面你可以續了 */ } }
“java抽象工廠模式怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。