工厂方法模式
一:
原:
简单工厂
即
package java1;
import java.util.*;
abstract class Operation {
private double numberA =0;
private double numberB =0;
boolean flag =true;
public double setNumberA(double a) {
return a;
}
public double setNumberB(double b) {
return b;
}
public double getNumberA() {
return numberA;
}
public double getNumberB() {
return numberB;
}
public abstract double getResult();
}
class OperationAdd extends Operation{
public double getResult() {
return getNumberA()+getNumberB();
}
}
class OperationSub extends Operation{
public double getResult() {
return getNumberA()-getNumberB();
}
}
class OperationMul extends Operation{
public double getResult() {
return getNumberA()*getNumberB();
}
}
class OperationDiv extends Operation{
public double getResult() {
return getNumberA()/getNumberB();
}
}
class OperationFactory{
public static Operation createOperate(char operate) {
Operation oper=null;
switch(operate) {
case'+':oper=new OperationAdd();break;
case'-':oper=new OperationSub();break;
case'*':oper=new OperationMul();break;
case'/':oper=new OperationDiv();break;
//增加 运算方法
}
return oper;
}
}
public class Java1{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入数字A:");
double A=sc.nextDouble(); sc.nextLine();
System.out.println("请选择运算符号+ - */ ");
char op=sc.nextLine().charAt(0);
System.out.println("请输入数字B:");
double B=sc.nextDouble();
Operation oper;
oper=OperationFactory.createOperate(op);
oper.setNumberA(A);
oper.setNumberA(B);
System.out.println("结果是:"+oper.getResult());
}
}
改:
package java1;
import java.util.*;
abstract class Operation {
private double numberA =0;
private double numberB =0;
boolean flag =true;
public double setNumberA(double a) {
return a;
}
public double setNumberB(double b) {
return b;
}
public double getNumberA() {
return numberA;
}
public double getNumberB() {
return numberB;
}
public abstract double getResult();
}
class OperationAdd extends Operation{
public double getResult() {
return getNumberA()+getNumberB();
}
}
class OperationSub extends Operation{
public double getResult() {
return getNumberA()-getNumberB();
}
}
class OperationMul extends Operation{
public double getResult() {
return getNumberA()*getNumberB();
}
}
class OperationDiv extends Operation{
public double getResult() {
return getNumberA()/getNumberB();
}
}
interface IFactory{
Operation createOperation();
}
class AddFactory implements IFactory{
public Operation createOperation() {
return new OperationAdd();
}
}
class SubFactory implements IFactory{
public Operation createOperation() {
return new OperationSub();
}
}
class MulFactory implements IFactory{
public Operation createOperation() {
return new OperationMul();
}
}
class DivFactory implements IFactory{
public Operation createOperation() {
return new OperationDiv();
}
}
public class Java1{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入数字A:");
double A=sc.nextDouble(); sc.nextLine();
System.out.println("请选择运算符号+ - */ ");
char op=sc.nextLine().charAt(0);
System.out.println("请输入数字B:");
double B=sc.nextDouble();
IFactory operFactory=null;
switch(op) {
case'+':operFactory=new AddFactory();break;
case'-':operFactory=new SubFactory();break;
case'*':operFactory=new MulFactory();break;
case'/':operFactory=new DivFactory();break;
}
Operation oper=operFactory.createOperation();
oper.setNumberA(A);
oper.setNumberA(B);
try {
System.out.println("结果是:"+oper.getResult());
}
catch(Exception e){
e.printStackTrace();
}
}
}