一、简单工厂模式
package factory;
import java.util.*;
abstract class Operation{
double numbera=0;
double numberb=0;
public double getNumbera() {
return numbera;
}
public void setNumbera(double numbera) {
this.numbera=numbera;
}
public double getNumberb() {
return numberb;
}
public void setNumberb(double numberb) {
this.numberb=numberb;
}
public abstract double getResult();
}
class Operationadd extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
return getNumbera()+getNumberb();
}
}
class OperationSub extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
return getNumbera()-getNumberb();
}
}
class OperationMul extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
return getNumbera()*getNumberb();
}
}
class OperationDiv extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
return getNumbera()/getNumberb();
}
}
/*a的b次方*/
class OperationMN extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
double s=1;
double a=getNumbera();
int b=(int) getNumberb();
for(int i=1;i<=b;i++)
s=s*a;
return s;
}
}
/*简单运算工厂类*/
class OperationFactory{
public static Operation createOperation(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;
case'^':oper=new OperationMN();break;
}
return oper;
}
}
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入数字a:");
String strNumbera=in.nextLine();
System.out.println("请选择运算符号(+、-、*、/、^):");
String strOperator=in.nextLine();
System.out.println("请输入数字b:");
String strNumberb=in.nextLine();
Operation oper;
oper=OperationFactory.createOperation(strOperator.charAt(0));
oper.setNumbera(Double.parseDouble(strNumbera));
oper.setNumberb(Double.parseDouble(strNumberb));
System.out.println("结果:"+oper.getResult());
in.close();
}
}
二、工厂模式
import java.util.*;
abstract class Operation{
double numbera=0;
double numberb=0;
public double getNumbera() {
return numbera;
}
public void setNumbera(double numbera) {
this.numbera=numbera;
}
public double getNumberb() {
return numberb;
}
public void setNumberb(double numberb) {
this.numberb=numberb;
}
public abstract double getResult();
}
class Operationadd extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
return getNumbera()+getNumberb();
}
}
class OperationSub extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
return getNumbera()-getNumberb();
}
}
class OperationMul extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
return getNumbera()*getNumberb();
}
}
class OperationDiv extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
return getNumbera()/getNumberb();
}
}
/*a的b次方*/
class OperationMN extends Operation{
@Override
public double getResult() {
// TODO auto-generated method stub
double s=1;
double a=getNumbera();
int b=(int) getNumberb();
for(int i=1;i<=b;i++)
s=s*a;
return s;
}
}
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();
}
}
class MNFactory implements IFactory{
public Operation createOperation() {
return new OperationMN();
}
}
class OperationFactory{
public static Operation createOperation(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;
case'^':oper=new OperationMN();break;
}
return oper;
}
}
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入数字a:");
String strNumbera=in.nextLine();
System.out.println("请选择运算符号(+、-、*、/、^):");
String strOperator=in.nextLine();
System.out.println("请输入数字b:");
String strNumberb=in.nextLine();
IFactory operFactory=null;
switch(strOperator.charAt(0))
{
case'+':operFactory=new addFactory();break;
case'-':operFactory=new SubFactory();break;
case'*':operFactory=new MulFactory();break;
case'/':operFactory=new DivFactory();break;
case'^':operFactory=new MNFactory();break;
}
Operation oper=operFactory.createOperation();
oper.setNumbera(Double.parseDouble(strNumbera));
oper.setNumberb(Double.parseDouble(strNumberb));
try {
double result=oper.getResult();
System.out.println("结果:"+result);
}catch(Exception e) {
e.printStackTrace();
}
}
}