簡單工廠模式-設(shè)計模式學(xué)習(xí)

文字理解

簡單工廠模式又 叫靜態(tài)工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負(fù)責(zé)創(chuàng)建其他類的實例,被創(chuàng)建的實例通常都具有共同的父類。

簡單描述

簡單工廠將對象的創(chuàng)建過程進行了封裝,用戶不知道到底創(chuàng)建了什么對象,只需要調(diào)用工廠類,工廠類按照自己的邏輯進行創(chuàng)建對象。

代碼理解

現(xiàn)在有一道面試題:

使用java實現(xiàn)一個計算機控制臺程序,要求輸入數(shù)的運算,得到結(jié)果。

public abstract class Operation {

    public abstract float getResult(float firstNumber, float secondNumber);

}

//把符號都當(dāng)做對象處理,實現(xiàn)此接口
public class AddOperation extends Operation {
    @Override
    public float getResult(float firstNumber, float secondNumber) {
        return firstNumber+secondNumber;
    }

}
public class SubOperation extends Operation {
    @Override
    public float getResult(float firstNumber, float secondNumber) {
        return firstNumber-secondNumber;
    }
}
public class MulOperation extends Operation {
    @Override
    public float getResult(float firstNumber, float secondNumber) {
        return firstNumber*secondNumber;
    }
}
public class DivOperation extends Operation {
    @Override
    public float getResult(float firstNumber, float secondNumber) {
        return firstNumber/secondNumber;
    }
}

//接下來需要解決的就是對象的創(chuàng)建問題了,既如何根據(jù)不同的情況創(chuàng)建不同的對象:我們正好可以通過簡單工廠模式實現(xiàn)
public class OperationFactory {

    public static Operation getOperation(String quotaFlag){
        Operation o = null;
        switch (quotaFlag){
            case "+" :  o = new AddOperation();
            case "-" :  o = new SubOperation();
            case "*" :  o = new MulOperation();
            case "/" :  o = new DivOperation();
            default:break;
        }
        return o;
    }
}
//調(diào)用:
public class Computer {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("請輸入第一個數(shù)字:");
        float firstNum  = in.nextFloat();
        System.out.println("請輸入第二個數(shù)字:");
        float secondNum  = in.nextFloat();
        System.out.println("請輸入運算符號:");
        String countQuato = in.next();
        System.out.println(count(firstNum,secondNum,countQuato));
    }
    private static float count(float firstNum,float secondNum , String countQuota){
    //通過工廠類獲取對象
        Operation operation = OperationFactory.getOperation(countQuota);
        return operation.getResult(firstNum,secondNum);
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 如今的淘寶、1688已經(jīng)不再是幾年前的模樣了,只是把各種各樣產(chǎn)品匯聚在平臺上,然后讓買家自己選產(chǎn)品。隨著阿里巴巴的...
    思考的樂趣閱讀 1,874評論 0 0
  • 主要是基于R語言和高德提供的web API進行編寫 以下是高德開放平臺提供的入門指南:第 1 步:申請”Web服務(wù)...
    HOHOOO閱讀 833評論 0 0
  • 未來總是存在各種不確定性,選擇恐懼癥將會是我們成長中巨大的絆腳石,因為優(yōu)柔寡斷會讓我們失去更多。這個時代,很多時候...
    Tim_辰天閱讀 361評論 0 0