天天看點

Java實作軟體設計模式---抽象工廠模式(性别産品等級結構膚色産品族)

一、題目要求

Java實作軟體設計模式---抽象工廠模式(性别産品等級結構膚色産品族)

二、畫出對應的類圖

Java實作軟體設計模式---抽象工廠模式(性别産品等級結構膚色産品族)

三、檔案目錄結構

Java實作軟體設計模式---抽象工廠模式(性别産品等級結構膚色産品族)
Java實作軟體設計模式---抽象工廠模式(性别産品等級結構膚色産品族)

 四、具體實作代碼

Black.java

1 package com.a004;
 2 
 3 public class Black implements Color{
 4     @Override
 5     public Man produceMan() {
 6         return new BlackMan();
 7     }
 8 
 9     @Override
10     public Woman produceWoman() {
11         return new BlackWoman();
12     }
13 }      

BlackMan.java

1 package com.a004;
2 
3 public class BlackMan implements Man{
4     @Override
5     public void play(){
6         System.out.println("我是黑種男人!");
7     }
8 }      

BlackWoman.java

1 package com.a004;
2 
3 public class BlackWoman implements Woman {
4 
5     @Override
6     public void play() {
7         System.out.println("我是黑種女人!");
8     }
9 }      

Color.java

1 package com.a004;
2 
3 public interface Color {
4     public Man produceMan();
5     public Woman produceWoman();
6 }      

Yellow.java

1 package com.a004;
 2 
 3 public class Yellow implements Color{
 4     @Override
 5     public Man produceMan() {
 6         return new YellowMan();
 7     }
 8 
 9     @Override
10     public Woman produceWoman() {
11         return new YellowWoman();
12     }
13 }      

White.java

1 package com.a004;
 2 
 3 public class White implements Color {
 4     @Override
 5     public Man produceMan() {
 6         return new WhiteMan();
 7     }
 8 
 9     @Override
10     public Woman produceWoman() {
11         return new WhiteWoman();
12     }
13 }      

Man.java

1 package com.a004;
2 
3 public interface Man {
4     public void play();
5 }      

WhiteMan.java

1 package com.a004;
2 
3 public class WhiteMan implements Man {
4     @Override
5     public void play() {
6         System.out.println("我是白種男人!");
7     }
8 }      

YellowMan.java

1 package com.a004;
2 
3 public class YellowMan implements Man{
4     @Override
5     public void play() {
6         System.out.println("我是黃種男人!");
7     }
8 }      

Woman.java

1 package com.a004;
2 
3 public interface Woman {
4 
5     public void play() ;
6 }      

WhiteWoman.java

1 package com.a004;
2 
3 public class WhiteWoman implements Woman {
4     @Override
5     public void play() {
6         System.out.println("我是白種女人!");
7     }
8 }      

YellowWoman.java

1 package com.a004;
2 
3 public class YellowWoman implements Woman {
4     @Override
5     public void play() {
6         System.out.println("我是黃種女人!");
7     }
8 }      

五、測試代碼以及配置代碼

XMLUtil.java

1 package com.a004;
 2 import javax.xml.parsers.*;
 3 import org.w3c.dom.*;
 4 import org.xml.sax.SAXException;
 5 import java.io.File;
 6 public class XMLUtil {
 7     public static Object getBean() {
 8         try {
 9                 //建立DOM文檔對象
10                 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
11                 DocumentBuilder builder = dFactory.newDocumentBuilder();
12                 Document doc;
13                 doc = builder.parse(new File("config.xml"));
14                 //擷取包含類名的文本節點
15                 NodeList nl = doc.getElementsByTagName("className");
16                 Node classNode = nl.item(0).getFirstChild();
17                 String cName = classNode.getNodeValue();
18                 System.out.println("類名:  "+ cName); //輸出類名
19                 //通過類名生成執行個體對象傳回
20 
21             Object obj = null;
22             try {
23                 Class c =Class.forName("com.a004."+cName);
24                 obj = c.newInstance();
25             } catch (ClassNotFoundException e) {
26                 System.out.println("ClassNotFoundException");
27                 e.printStackTrace();
28             } catch (InstantiationException e) {
29                 System.out.println("InstantiationException");
30                 e.printStackTrace();
31             } catch (IllegalAccessException e) {
32                 System.out.println("IllegalAccessException");
33                 e.printStackTrace();
34             }
35             return obj;
36         } catch (Exception e) {
37             e.printStackTrace();
38             return null;
39         }
40     }
41 }      

config.xml

1 <?xml version = "1.0"?>
2 <config>
3     <className>Black</className>
4 </config>      

Client.java

1 package com.a004;
 2 public class Client {
 3     public static void main(String[] args) {
 4         Color color;
 5         Man man;
 6         Woman woman;
 7         color=(Color) XMLUtil.getBean();
 8 //        color=new White();
 9         woman=color.produceWoman();
10         woman.play();
11         man=color.produceMan();
12         man.play();
13     }
14 }      

測試結果

Java實作軟體設計模式---抽象工廠模式(性别産品等級結構膚色産品族)

繼續閱讀