软件设计实验4:抽象工厂模式

发布时间 2023-10-31 22:06:27作者: STDU_DREAM

实验4:抽象工厂模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解抽象工厂模式的动机,掌握该模式的结构;

2、能够利用抽象工厂模式解决实际问题

 

[实验任务一]:人与肤色

使用抽象工厂模式,完成下述产品等级结构:

 

实验要求:

1. 画出对应的类图;

 

2. 提交源代码;

  1. public interface Man {  
  2. public void makeM();  
  3. }  
  4. public class YellowMan implements Man {  
  5. public void makeM() {  
  6. System.out.println("黄男!");  
  7. }  
  8. }  
  9. public class WhiteMan implements Man {  
  10. public void makeM() {  
  11. System.out.println("白男!");  
  12. }  
  13. }  
  14. public class BlackMan implements Man {  
  15. @Override  
  16. public void makeM() {  
  17. System.out.println("黑男!");  
  18. }  
  19. }  
  20. public interface Woman {  
  21. public void makeW();  
  22. }  
  23. public class WhiteWoman implements Woman {  
  24. @Override  
  25. public void makeW() {  
  26. System.out.println("白女!");  
  27. }  
  28. }  
  29. public class BlackWoman implements Woman {  
  30. @Override  
  31. public void makeW() {  
  32. System.out.println("黑女!");  
  33. }  
  34. }  
  35. public class YellowWoman implements Woman {  
  36. public void makeW() {  
  37. System.out.println("黄女!");  
  38. }  
  39. }  
  40. public interface Color {  
  41. public Man produceMan();  
  42. public Woman produceWoman();  
  43. }  
  44. public class Yellow implements Color{  
  45. @Override  
  46. public Man produceMan() {  
  47. return new YellowMan();  
  48. }  
  49. @Override  
  50. public Woman produceWoman() {  
  51. return new YellowWoman();  
  52. }  
  53. }  
  54. public class Black implements Color{  
  55. @Override  
  56. public Man produceMan() {  
  57. return new BlackMan();  
  58. }  
  59. @Override  
  60. public Woman produceWoman() {  
  61. return new BlackWoman();  
  62. }  
  63. }  
  64. package test4;  
  65. /* 
  66. * 读取XML文件并根据存储在XML文件中的类名获取对应的对象 
  67. */  
  68. import javax.xml.parsers.*;  
  69. import org.w3c.dom.*;  
  70. import java.io.File;  
  71. public class XMLUtil {  
  72. @SuppressWarnings("deprecation")  
  73. public static Object getBean() {  
  74. try {  
  75. //创建DOM文档对象  
  76. DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();  
  77. DocumentBuilder builder = dFactory.newDocumentBuilder();  
  78. Document doc;  
  79. doc = builder.parse(new File("config.xml"));  
  80. //获取包含类名的文本节点  
  81. NodeList nl = doc.getElementsByTagName("className");  
  82. Node classNode = nl.item(0).getFirstChild();  
  83. String cName = classNode.getNodeValue();  
  84. System.out.println("类名:  "+ cName); //输出类名  
  85. //通过类名生成实例对象返回  
  86. Class c = Class.forName(cName);  
  87. Object obj = c.newInstance();  
  88. return obj;  
  89. catch (Exception e) {  
  90. e.printStackTrace();  
  91. return null;  
  92. }  
  93. }  
  94. }  
  95. public class Client {  
  96. public static void main(String[] args) {  
  97. try   
  98. {  
  99. Color color;  
  100. Man man;  
  101. Woman woman;  
  102. color=(Color)XMLUtil.getBean();  
  103. System.out.println(color);  
  104. woman=color.produceWoman();  
  105. woman.makeW();  
  106. man=color.produceMan();  
  107. man.makeM();  
  108. }catch(Exception e){  
  109. System.out.print(e.getMessage());  
  110. }  
  111. }  
  112. }  

 

 

3.注意编程规范。