這篇文章主要講解了“JAVA抽象工廠模式是什么及怎么實現(xiàn)”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JAVA抽象工廠模式是什么及怎么實現(xiàn)”吧!
為靖宇等地區(qū)用戶提供了全套網頁設計制作服務,及靖宇網站建設行業(yè)解決方案。主營業(yè)務為成都網站建設、網站制作、靖宇網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
抽象工廠(AbstractFactory)模式的定義:是一種為訪問類提供一個創(chuàng)建一組相關或相互依賴對象的接口,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。
系統(tǒng)中有多個產品族,每個具體工廠創(chuàng)建同一族但屬于不同等級結構的產品。
系統(tǒng)一次只可能消費其中某一族產品,即同族的產品一起使用。
可以在類的內部對產品族中相關聯(lián)的多等級產品共同管理,而不必專門引入多個新的類來進行管理。
當需要產品族時,抽象工廠可以保證客戶端始終只使用同一個產品的產品組。
抽象工廠增強了程序的可擴展性,當增加一個新的產品族時,不需要修改原代碼,滿足開閉原則。
當產品族中需要增加一個新的產品時,所有的工廠類都需要進行修改。增加了系統(tǒng)的抽象性和理解難度。
案例的主要角色如下:
抽象工廠(Abstract Factory):七俠傳承
工廠(SimpleFactory):師傅、師娘
抽象產品(Product):天外隕石(鑄劍的原材料)、一窩靈鴿蛋(未孵化的靈鴿)
具體產品(ConcreteProduct):七劍。七只靈鴿
案例:
師傅擁有七俠傳承,會打造至陽之劍和培養(yǎng)雄性小靈鴿。
師娘擁有七俠傳承,會打造至陰之劍和培養(yǎng)雌性小靈鴿。
七俠找?guī)煾祹熌锎蛟熳约旱膭皖I養(yǎng)自己的小靈鴿。
S1接口(天外隕石):
接口內聲明了一個方法
public interface S1 { void show();}
S2接口(一窩靈鴿蛋):
接口內聲明了一個方法
public interface S2 { void show();}
A1類實現(xiàn)接口S1(長虹劍):
實現(xiàn)S1接口
public class A1 implements S1 { @Override public void show() { System.out.println("打造了一把長虹劍"); }}
B1類實現(xiàn)接口S1(冰魄劍):
實現(xiàn)S1接口
public class B1 implements S1 { @Override public void show() { System.out.println("打造了一把冰魄劍"); }}
C1類實現(xiàn)接口S1(紫云劍):
實現(xiàn)S1接口
public class C1 implements S1 { @Override public void show() { System.out.println("打造了一把紫云劍"); }}
D1類實現(xiàn)接口S1(雨花劍):
實現(xiàn)S1接口
public class D1 implements S1 { @Override public void show() { System.out.println("打造了一把紫云劍"); }}
E1類實現(xiàn)接口S1(青光劍):
實現(xiàn)Ss接口
public class E1 implements S1 { @Override public void show() { System.out.println("打造了一把紫云劍"); }}
F1類實現(xiàn)接口S1(奔雷劍):
實現(xiàn)Ss接口
public class F1 implements S1 { @Override public void show() { System.out.println("打造了一把紫云劍"); }}
G1類實現(xiàn)接口S1(旋風劍):
實現(xiàn)Ss接口
public class G1 implements S1 { @Override public void show() { System.out.println("打造了一把紫云劍"); }}
A2類實現(xiàn)接口S2(靈鴿一號):
實現(xiàn)S1接口
public class A2 implements S2 { @Override public void show() { System.out.println("靈鴿七號"); }}
B2類實現(xiàn)接口S2(靈鴿二號):
實現(xiàn)S1接口
public class B2 implements S2 { @Override public void show() { System.out.println("靈鴿七號"); }}
C2類實現(xiàn)接口S2(靈鴿三號):
實現(xiàn)S1接口
public class C2 implements S2 { @Override public void show() { System.out.println("靈鴿七號"); }}
D2類實現(xiàn)接口S2(靈鴿四號):
實現(xiàn)S1接口
public class D2 implements S2 { @Override public void show() { System.out.println("靈鴿七號"); }}
E2類實現(xiàn)接口S2(靈鴿五號):
實現(xiàn)Ss接口
public class E2 implements S2 { @Override public void show() { System.out.println("靈鴿七號"); }}
F2類實現(xiàn)接口S2(靈鴿六號):
實現(xiàn)Ss接口
public class F2 implements S2 { @Override public void show() { System.out.println("靈鴿七號"); }}
G2類實現(xiàn)接口S2(靈鴿七號):
實現(xiàn)Ss接口
public class G2 implements S2 { @Override public void show() { System.out.println("靈鴿七號"); }}
Zz接口(七俠傳承):
接口內聲明了一個鑄劍方法abc1()和一個養(yǎng)鴿子方法abc2()
public interface Zz { S1 abc1(String a); S2 abc2(String a);}
Nan類實現(xiàn)接口Zz(師傅):
實現(xiàn)Zz接口
public class Nan implements Zz { private static S1 s1; private static S2 s2; public S1 abc1(String a) { if ("長虹劍".equals(a)) { s1 = new A1(); } else if ("奔雷劍".equals(a)) { s1 = new F1(); } else if ("青光劍".equals(a)) { s1 = new E1(); } else if ("雨花劍".equals(a)) { s1 = new D1(); } else if ("旋風劍".equals(a)) { s1 = new G1(); } else { System.out.println("鑄劍失敗"); } return s1; } public S2 abc2(String a) { if ("靈鴿一號".equals(a)) { s2 = new A2(); } else if ("靈鴿二號".equals(a)) { s2 = new F2(); } else if ("靈鴿三號".equals(a)) { s2 = new E2(); } else if ("靈鴿四號".equals(a)) { s2 = new D2(); } else if ("靈鴿五號".equals(a)) { s2 = new G2(); } else { System.out.println("領養(yǎng)失敗"); } return s2; }}
Nv類實現(xiàn)接口Zz(師娘):
實現(xiàn)Zz接口
public class Nv implements Zz { private static S1 s1; private static S2 s2; public S1 abc1(String a) { if ("冰魄劍".equals(a)) { s1 = new B1(); } else if ("紫云劍".equals(a)) { s1 = new C1(); } else { System.out.println("鑄劍失敗"); } return s1; } public S2 abc2(String a) { if ("靈鴿六號".equals(a)) { s2 = new B2(); } else if ("靈鴿七號".equals(a)) { s2 = new C2(); } else { System.out.println("領養(yǎng)失敗"); } return s2; }}
測試
測試類:
public class Demo { public static void main(String[] args) { System.out.println("---------至陽傳承-------------"); //師傅 Nan nan = new Nan(); //造劍 S1 a1 = nan.abc1("長虹劍"); S1 d1 = nan.abc1("雨花劍"); S1 e1 = nan.abc1("青光劍"); S1 f1 = nan.abc1("奔雷劍"); S1 g1 = nan.abc1("旋風劍"); //養(yǎng)鴿子 S2 a2 = nan.abc2("靈鴿一號"); S2 d2 = nan.abc2("靈鴿二號"); S2 e2 = nan.abc2("靈鴿三號"); S2 f2 = nan.abc2("靈鴿四號"); S2 g2 = nan.abc2("靈鴿五號"); a1.show(); d1.show(); e1.show(); f1.show(); g1.show(); a2.show(); d2.show(); e2.show(); f2.show(); g2.show(); System.out.println("---------至陰傳承-------------"); //女鑄劍師 Nv nv = new Nv(); S1 b1 = nv.abc1("冰魄劍"); S1 c1 = nv.abc1("紫云劍"); b1.show(); c1.show(); S2 b2 = nv.abc2("靈鴿六號"); S2 c2 = nv.abc2("靈鴿七號"); b2.show(); c2.show(); }}
感謝各位的閱讀,以上就是“JAVA抽象工廠模式是什么及怎么實現(xiàn)”的內容了,經過本文的學習后,相信大家對JAVA抽象工廠模式是什么及怎么實現(xiàn)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!