1. 程式人生 > >簡單工廠設計模式

簡單工廠設計模式

factory ddc sys gif style 乘法 三種 不同的 pub

案例:計算器程序的編寫

第一種:

技術分享
import java.util.Scanner;

public class Operation {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("請輸入第一個數字:");
        double num1 = input.nextDouble();
        System.out.println("請輸入運算符號:");
        String operate 
= input.next(); System.out.println("請輸入第二個數字:"); double num2 = input.nextDouble(); double sum = 0; // 保存結果 switch (operate) { case "+": sum = num1 + num2; break; case "-": sum = num1 - num2; break; case
"*": sum = num1 * num2; break; case "/": sum = num1 / num2; break; } System.out.println("結果是:" + sum); } }
計算器

第二種:

技術分享
/**
 * 運算類
 */
public class Operate {

    public static double getOperate(double num1, String operate, double
num2) { double sum = 0; // ??′??á?? switch (operate) { case "+": sum = num1 + num2; break; case "-": sum = num1 - num2; break; case "*": sum = num1 * num2; break; case "/": sum = num1 / num2; break; } return sum; } }
運算類 技術分享
import java.util.Scanner;

public class Operation {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("請輸入第一個數字:");
        double num1 = input.nextDouble();
        System.out.println("請輸入運算符號:");
        String operate = input.next();
        System.out.println("請輸入第二個數字:");
        double num2 = input.nextDouble();
        // 獲取結果
        double sum = Operate.getOperate(num1, operate, num2);
        System.out.println("結果是:" + sum);

    }
}
測試類

第三種:

01.設置一個運算類接口

02.然後四種運算方法分別實現此接口

03.在寫出運算類和測試類

技術分享
/**
 *  無論是加減乘除 還是平方,開根等
 *  都是運算
 *  接口就是規定一種行為! 不關註實現!
 *  就寫一個運算的方法!
 *  
 */
public interface Operation {

    double getResult(double num1, double num2);

}
總接口 技術分享
public class Addtion implements Operation {

    @Override
    public double getResult(double num1, double num2) {
        return num1 + num2;
    }

}
加法 技術分享
public class Minus implements Operation {

    @Override
    public double getResult(double num1, double num2) {
        return num1 - num2;
    }

}
減法 技術分享
public class Multiplication implements Operation {

    @Override
    public double getResult(double num1, double num2) {
        return num1 * num2;
    }

}
乘法 技術分享
public class Division implements Operation {

    @Override
    public double getResult(double num1, double num2) {
        return num1 / num2;
    }

}
除法 技術分享
import cn.bdqn.third.impl.Addtion;
import cn.bdqn.third.impl.Division;
import cn.bdqn.third.impl.Minus;
import cn.bdqn.third.impl.Multiplication;
import cn.bdqn.third.impl.Operation;

/**
 * 運算類
 * 
 * 
 * 
 *  真正運算的是 我們的接口還是  實現類!!!!   
 *  肯定是實現類!
 *  言外之意,我們需要實例化 實現類 才能實現運算的功能!
 *  這麽多實現類 都需要 實例化!
 *  
 *  01.我們有繼承關系!
 *  02.有多個實現類需要實例化
 *  03.首選我們的工廠設計模式
 *  
 *  雖然代碼量增加! 但是我們程序的擴展性和復用性強了!耦合度降低!
 *  
 */
public class OperateFactory {

    /**
     * 
     * @param operate  用戶傳遞過來的運算符號
     * @return  根據用戶的運算符號  返回不同的算法
     */
    public static Operation getOperate(String operate) {
        // 父類引用指向子類的對象
        Operation operation = null;
        switch (operate) {
        case "+":
            operation = new Addtion();
            break;
        case "-":
            operation = new Minus();
            break;
        case "*":
            operation = new Multiplication();
            break;
        case "/":
            operation = new Division();
            break;
        }
        return operation;
    }

}
運算類 技術分享
import java.util.Scanner;

import cn.bdqn.third.impl.Operation;

public class OperationDemo {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("請輸入第一個數字:");
        double num1 = input.nextDouble();
        System.out.println("請輸入運算符號:");
        String operate = input.next();
        System.out.println("請輸入第二個數字:");
        double num2 = input.nextDouble();
        Operation operation = OperateFactory.getOperate(operate);
        System.out.println(operation.getResult(num1, num2));

    }
}
測試類

簡單工廠設計模式