A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李江 中级黑马   /  2013-10-12 08:56  /  1253 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

从这节开始学习设计模式,首先学习创建模式,其中工厂模式是创建模式里面最常见也常用的一种,工厂模式又分简单工厂模式(Simple Factory),工厂方法模式(Factory Method)和抽象工厂模式(Abstractor Factory),这里先学习最简单的也就是简单工厂模式。


简单工厂模式(Simple Factory)也称静态工厂方法模式,是工厂方法模式的特殊实现。简单工厂模式的一般性结构如下图:


         简单工厂模式就是由一个工厂类根据传入的参量决定创建出哪一种产品类型的实例,下面我们拿实例来介绍简单工厂模式。如下图,抽象类型车包括子类火车,汽车,拖拉机。



工厂根据传入的参数来创建具体车的类型。上图中无法形象地表示抽象类所以用接口代替了。


java代码如下:

  1. package com.pattern.SimpleFactory;
  2. /**
  3. *
  4. *【描述】:工厂类
  5. *【作者】:alaric
  6. *【时间 】:May 20, 2012
  7. *【文件】:com.pattern.SimpleFactoryFactory.java
  8. *
  9. */
  10. public class Factory {
  11. /**
  12. *
  13. *【描述】:创建车的实例 这个类里面的判断代码在实际应用中多配置成map,如果用spring 则可以配置在bean的xml内
  14. *【作者】:alaric
  15. *【时间 】:May 20, 2012
  16. * @throws TypeErrorException
  17. *
  18. */
  19.     public TrafficMachine creator(String type) throws TypeErrorException{
  20.         if(type.equals("Automobile")){
  21.             return new Automobile();
  22.         }else if (type.equals("Tractor")) {
  23.             return new Tractor();
  24.         }else if (type.equals("Train")) {
  25.             return new Train();
  26.         }else{
  27.             throw new TypeErrorException("not find "+type);
  28.         }
  29.     }
  30. }
  31. package com.pattern.SimpleFactory;
  32. /**
  33. *
  34. *【描述】:汽车类
  35. *【作者】:alaric
  36. *【时间 】:May 20, 2012
  37. *【文件】:com.pattern.SimpleFactoryAutomobile.java
  38. *
  39. */
  40. public class Automobile extends TrafficMachine{
  41. @Override
  42. public void traffic() {
  43. // TODO Auto-generated method stub
  44. }
  45. }
  46. package com.pattern.SimpleFactory;
  47. /**
  48. *
  49. *【描述】:拖拉机
  50. *【作者】:alaric
  51. *【时间 】:May 20, 2012
  52. *【文件】:com.pattern.SimpleFactoryTractor.java
  53. *
  54. */
  55. public class Tractor extends TrafficMachine{
  56. @Override
  57. public void traffic() {
  58. // TODO Auto-generated method stub
  59. }
  60. /**
  61. *
  62. *【描述】:耕地
  63. *【作者】:alaric
  64. *【时间 】:May 20, 2012
  65. *
  66. */
  67. public void plough(){
  68. }
  69. }
  70. package com.pattern.SimpleFactory;
  71. /**
  72. *
  73. *【描述】:火车
  74. *【作者】:alaric
  75. *【时间 】:May 20, 2012
  76. *【文件】:com.pattern.SimpleFactoryTrain.java
  77. *
  78. */
  79. public class Train extends TrafficMachine {
  80. private int nodeNum; //节数
  81. private int trainNum; //车次
  82. @Override
  83. public void traffic() {
  84. // TODO Auto-generated method stub
  85. }
  86. public int getNodeNum() {
  87. return nodeNum;
  88. }
  89. public void setNodeNum(int nodeNum) {
  90. this.nodeNum = nodeNum;
  91. }
  92. public int getTrainNum() {
  93. return trainNum;
  94. }
  95. public void setTrainNum(int trainNum) {
  96. this.trainNum = trainNum;
  97. }
  98. }
  99. package com.pattern.SimpleFactory;
  100. /**
  101. *
  102. *【描述】:抽象类 车
  103. *【作者】:alaric
  104. *【时间 】:May 20, 2012
  105. *【文件】:com.pattern.SimpleFactoryMachine.java
  106. *
  107. */
  108. public abstract class TrafficMachine {
  109. public float power ;
  110. public float load ;
  111. public abstract void traffic();
  112. }
  113. package com.pattern.SimpleFactory;
  114. /**
  115. *
  116. *【描述】:类型异常类
  117. *【作者】:alaric
  118. *【时间 】:May 20, 2012
  119. *【文件】:com.pattern.SimpleFactoryTypeErrorException.java
  120. *
  121. */
  122. public class TypeErrorException extends Exception{
  123. /**
  124. *
  125. */
  126. private static final long serialVersionUID = 562037380358960152L;
  127. public TypeErrorException(String message) {
  128. super(message);
  129. // TODO Auto-generated constructor stub
  130. }
  131. }
复制代码


1 个回复

倒序浏览
怎么仅仅列了一个简单工厂模式啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马