经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式之简单工厂模式
来源:cnblogs  作者:余露倾晨  时间:2018/10/15 9:22:34  对本文有异议

简单工厂模式,也叫静态工厂模式,即由一个静态工厂类来统一创建所需要的实例对象。

本例中,将主要实现加减乘除计算。

第一步,定义抽象基类Operation

  1. 1 /**
  2. 2 * @author abo
  3. 3 * @title Operation
  4. 4 * @ProjectName Test
  5. 5 * @Description: 运算类的基类,定义了两个运算数
  6. 6 * @CreateDate 2018-10-13 14:15
  7. 7 */
  8. 8 public abstract class Operation {
  9. 9 private double numberA=0;
  10. 10 private double numberB=0;
  11. 11
  12. 12 public double getNumberA() {
  13. 13 return numberA;
  14. 14 }
  15. 15
  16. 16 public void setNumberA(double numberA) {
  17. 17 this.numberA = numberA;
  18. 18 }
  19. 19
  20. 20 public double getNumberB() {
  21. 21 return numberB;
  22. 22 }
  23. 23
  24. 24 public void setNumberB(double numberB) {
  25. 25 this.numberB = numberB;
  26. 26 }
  27. 27
  28. 28 public abstract double getResult();
  29. 29 }

第二步:定义加减乘除四个子类继承于Operation类

OperationAdd(加法运算子类)

  1. 1 /**
  2. 2 * @author abo
  3. 3 * @title OperationAdd
  4. 4 * @ProjectName Test
  5. 5 * @Description: 继承操作类,实现加法运算
  6. 6 * @CreateDate 2018-10-13 14:17
  7. 7 */
  8. 8 public class OperationAdd extends Operation {
  9. 9
  10. 10 @Override
  11. 11 public double getResult() {
  12. 12 double result = 0;
  13. 13 result = getNumberA()+getNumberB();
  14. 14 return result;
  15. 15 }
  16. 16 }

OperationSub(减法运算子类)

  1. 1 /**
  2. 2 * @author abo
  3. 3 * @title OperationSub
  4. 4 * @ProjectName Test
  5. 5 * @Description: 继承操作类,实现减法运算
  6. 6 * @CreateDate 2018-10-13 14:22
  7. 7 */
  8. 8 public class OperationSub extends Operation {
  9. 9 @Override
  10. 10 public double getResult() {
  11. 11 double result = 0;
  12. 12 result = getNumberA()-getNumberB();
  13. 13 return result;
  14. 14 }
  15. 15 }

OperationMul(乘法运算子类)

  1. 1 /**
  2. 2 * @author abo
  3. 3 * @title OperationMul
  4. 4 * @ProjectName Test
  5. 5 * @Description: 继承操作类,实现乘法运算
  6. 6 * @CreateDate 2018-10-13 14:23
  7. 7 */
  8. 8 public class OperationMul extends Operation {
  9. 9 @Override
  10. 10 public double getResult() {
  11. 11 double result= 0;
  12. 12 result = getNumberA()*getNumberB();
  13. 13 return result;
  14. 14 }
  15. 15 }

OperationDiv(除法运算子类)

  1. 1 /**
  2. 2 * @author abo
  3. 3 * @title OperationDiv
  4. 4 * @ProjectName Test
  5. 5 * @Description: 继承操作类,实现除法运算
  6. 6 * @CreateDate 2018-10-13 14:24
  7. 7 */
  8. 8 public class OperationDiv extends Operation {
  9. 9 @Override
  10. 10 public double getResult() {
  11. 11 double result=0;
  12. 12 result = getNumberA()/getNumberB();
  13. 13 return result;
  14. 14 }
  15. 15 }

OperationFactory(运算工厂类)

  1. 1 /**
  2. 2 * @author abo
  3. 3 * @title OperationFactory
  4. 4 * @ProjectName Test
  5. 5 * @Description: 简单运算工厂类,用于创建操作类对象
  6. 6 * @CreateDate 2018-10-13 14:26
  7. 7 */
  8. 8 public class OperationFactory {
  9. 9 public static Operation createOperate(String operate){
  10. 10 Operation operation = null;
  11. 11 switch(operate){
  12. 12 case "+":
  13. 13 operation=new OperationAdd();
  14. 14 break;
  15. 15 case "-":
  16. 16 operation=new OperationSub();
  17. 17 break;
  18. 18 case "*":
  19. 19 operation=new OperationMul();
  20. 20 break;
  21. 21 case "/":
  22. 22 operation=new OperationDiv();
  23. 23 break;
  24. 24 }
  25. 25 return operation;
  26. 26 }
  27. 27 }

客户端程序Test类

  1. 1 Scanner scanner = new Scanner(System.in);
  2. 2 System.out.println("请输入第一个数字:");
  3. 3 double numberA = scanner.nextDouble();
  4. 4 System.out.println("请输入第二个数字:");
  5. 5 double numberB = scanner.nextDouble();
  6. 6 System.out.println("请输入操作符:如+、-、*、/");
  7. 7 String operator = scanner.next();
  8. 8 try {
  9. 9 Operation oper;
  10. 10 oper = OperationFactory.createOperate(operator);
  11. 11 oper.setNumberA(200);
  12. 12 oper.setNumberB(4);
  13. 13 System.out.println("结果为:"+oper.getResult());
  14. 14 } catch (Exception e) {
  15. 15 e.printStackTrace();
  16. 16 System.out.println("运算结果出错!");
  17. 17 }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号