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();
}
}
運作結果: