最牛视频网站建设,网站不用模板如何更新文章,opensuse wordpress,大连手机网站开发1 概述
将创造对象的工作交给一个单独的类来实现 #xff0c;这个单独的类就是工厂。
2 实现
假设要做一个计算器的需求#xff0c;通常我们想到的是这样写#xff1a;
package com.example.easyfactory;import java.util.Scanner;public class Demo1 {public static vo…1 概述
将创造对象的工作交给一个单独的类来实现 这个单独的类就是工厂。
2 实现
假设要做一个计算器的需求通常我们想到的是这样写
package com.example.easyfactory;import java.util.Scanner;public class Demo1 {public static void main(String[] args) {try {Scanner sc new Scanner(System.in);System.out.println(请输入数字A);double numberA Double.parseDouble(sc.nextLine());System.out.println(请输入运算符、-、*、/);String strOperate sc.nextLine();System.out.println(请输入数字B);double numberB Double.parseDouble(sc.nextLine());double result 0d;switch (strOperate) {case :result numberA numberB;break;case -:result numberA - numberB;break;case *:result numberA * numberB;break;case /:result numberA / numberB;break;}System.out.println(结果是 result);}catch (Exception e) {System.out.println(输入有错);}}
}但这段代码的问题在于其一显示和业务逻辑没有分离其二是没有使用面向对象的编程思想可扩展性和可重用性都很差。 可以考虑使用简单工厂模式将各个计算逻辑进行分离成为单独的类在工厂类中根据传入的参数构造不同预算符对象。 运算符抽象类
public abstract class Operation {public double getResult(double numberA, double numberB) {return 0d;}
}接下来是四个具体的运算符类
public class Add extends Operation{Overridepublic double getResult(double numberA, double numberB) {return numberA numberB;}
}public class Sub extends Operation{Overridepublic double getResult(double numberA, double numberB) {return numberA - numberB;}
}public class Mul extends Operation{Overridepublic double getResult(double numberA, double numberB) {return numberA * numberB;}
}public class Div extends Operation {Overridepublic double getResult(double numberA, double numberB) {if (numberB 0) {System.out.println(除数不能为0);throw new ArithmeticException();}return numberA / numberB;}
}工厂类
public class OperationFactory {public static Operation createOperation(String operate) {Operation oper null;switch (operate) {case :oper new Add();break;case -:oper new Sub();break;case *:oper new Mul();break;case /:oper new Div();break;}return oper;}
}测试类
public class Test {public static void main(String[] args) {Scanner sc new Scanner(System.in);System.out.println(请输入数字A);double numberA Double.parseDouble(sc.nextLine());System.out.println(请输入运算符、-、*、/);String strOperate sc.nextLine();System.out.println(请输入数字B);double numberB Double.parseDouble(sc.nextLine());double result 0d;Operation oper OperationFactory.createOperation(strOperate);result oper.getResult(numberA, numberB);System.out.println(结果为 result);}
}根据传入的参数的不同来从工厂类中获取具体的运算符类对象并调用运算方法。
3 总结
简单工厂模式就是通过一个抽象类抽象出一个抽象类和一个公共操作方法。具体的操作类来继承抽象类并重写该方法。工厂中根据传入参数的不同来构造具体的操作类对象并赋值给其父类即抽象类实际运行时由于多态特性会运行具体操作类中被重写的方法。