1.工厂方法简单介绍
工厂方法(Factory Method)是简单工厂的进一步抽象。产品的核心工厂类被提升为一个抽象类,具体的工作交给子类实现。简单工厂和工厂方法可以将其想象成一个小作坊和一个公司。简单工厂就是相当于小作坊,工厂方法相当于公司。公司本身不负责具体的工作,全交由下属工厂或者是作坊来负责。
2.UML类图
其中Calculate和Factory为抽象类。
3.具体代码实现
代码:
/*
* 名称: 工厂方法实现
* 功能: 利用工厂方法实现加减乘除四则运算的功能,将计算结果传达到抽象工厂类,再下发到各加减乘除运算处理工厂来具体处理
* */
import java.util.Scanner;
//--------------------------抽象计算类---------------------------------
abstract class Calculator
{
public abstract void calculate(float num1,float num2);//抽象一个计算方法
}
//------------------------具体实现计算类-------------------------------
class Addition extends Calculator //实现加法
{
public void calculate(float num1,float num2)
{
System.out.println("num1+num2="+(num1+num2));
}
}
class Substraction extends Calculator //实现减法
{
public void calculate(float num1,float num2)
{
System.out.println("num1-num2="+(num1-num2));
}
}
class Multiplication extends Calculator //实现乘法
{
public void calculate(float num1,float num2)
{
System.out.println("num1*num2="+(num1*num2));
}
}
class Division extends Calculator //实现除法
{
public void calculate(float num1,float num2)
{
if(num2==0)
{
System.out.println("num2为0,无法执行除法计算");
}
else
System.out.println("num1/num2="+(num1/num2));
}
}
//--------------------------工厂类----------------------------------
abstract class Factory //抽象工厂类,负责对下面的工厂发号施令
{
//抽象一个处理四则运算方法类,即为工厂类发出的命令
public abstract Calculator createCalculate();
}
//具体工厂类,实际处理四则运算
class AdditionFactory extends Factory //加法工厂类,负责处理加法运算
{
public Calculator createCalculate()
{
return new Addition();
}
}
class SubstractionFactory extends Factory //减法工厂类,负责处理减法运算
{
public Calculator createCalculate()
{
return new Substraction();
}
}
class MultiplicationFactory extends Factory //乘法工厂类,负责处理乘法运算
{
public Calculator createCalculate()
{
return new Multiplication();
}
}
class DivisionFactory extends Factory //除法工厂类,负责处理除法运算
{
public Calculator createCalculate()
{
return new Division();
}
}
//--------------------------客户端-----------------------------------
public class FactoryMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.print("请输入num1=");
float num1=sc.nextFloat(); //输入num1的值
System.out.print("请输入num2=");
float num2=sc.nextFloat(); //输入num2的值
System.out.println("四则运算结果如下:");
//执行加法运算
Calculator calculateAdd =new Addition(); //定义加法运算类
Factory factoryAdd=new AdditionFactory(); //定义加法工厂
calculateAdd.calculate(num1, num2);
factoryAdd.createCalculate();
//执行减法运算
Calculator calculateSub =new Substraction(); //定义减法运算类
Factory factorySub=new SubstractionFactory(); //定义减法工厂
calculateSub.calculate(num1, num2);
factorySub.createCalculate();
//执行乘法运算
Calculator calculateMul =new Multiplication(); //定义乘法运算类
Factory factoryMul=new MultiplicationFactory(); //定义乘法工厂
calculateMul.calculate(num1, num2);
factoryMul.createCalculate();
//执行除法运算
Calculator calculateDiv =new Division(); //定义除法运算类
Factory factoryDiv=new DivisionFactory(); //定义除法工厂
calculateDiv.calculate(num1, num2);
factoryDiv.createCalculate();
sc.close();
}
}
运行结果: