java設(shè)計(jì)模式之簡(jiǎn)單工廠(chǎng)模式
在編寫(xiě)一個(gè)計(jì)算器程序時(shí),可以將業(yè)務(wù)邏輯和顯示分離,業(yè)務(wù)邏輯封裝為一個(gè)類(lèi)(封裝);如果要新添加一種運(yùn)算,可以先創(chuàng)建一個(gè)Operation的基類(lèi),然后各種運(yùn)算從Operation類(lèi)繼承,并實(shí)現(xiàn)GetResult()虛函數(shù),這時(shí)添加新的運(yùn)算只需要派生一個(gè)新的類(lèi),即不需要之前的運(yùn)算參與編譯。如何讓計(jì)算器知道我是希望使用哪種運(yùn)算呢?應(yīng)該考慮單獨(dú)的類(lèi)來(lái)做這個(gè)創(chuàng)造實(shí)例的過(guò)程,這就是工廠(chǎng)。創(chuàng)建一個(gè)OperationFactory類(lèi),傳入?yún)?shù),函數(shù)createOperate就可以實(shí)例化出合適的對(duì)象。
Java代碼如下:
public class OperationFactory { public static abstract class Operation { private double _numberA = 0; private double _numberB = 0; public double get_numberA() { return _numberA; } public void set_numberA(double _numberA) { this._numberA = _numberA; } public double get_numberB() { return _numberB; } public void set_numberB(double _numberB) { this._numberB = _numberB; } abstract double GetResult(); // TODO Auto-generated constructor stub } public static class OperationAdd extends Operation { double GetResult() { double result = get_numberA() + get_numberB(); return result; } } public static class OperationSub extends Operation { double GetResult() { double result = get_numberA() - get_numberB(); return result; } } public static Operation createOperate(String operate){ Operation oper = null; if (operate.equals("+")) { oper = new OperationAdd(); } else if (operate.equals("-")) { oper = new OperationSub(); } return oper; } public static void main(String[] args) { Operation oper; oper = OperationFactory.createOperate("+"); oper.set_numberA(1); oper.set_numberB(2); double result = oper.GetResult(); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動(dòng)力節(jié)點(diǎn)之Java學(xué)院整理)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動(dòng)力節(jié)點(diǎn)之Java學(xué)院整理)的相關(guān)資料,需要的朋友可以參考下2017-04-04java正則表達(dá)式表單驗(yàn)證類(lèi)工具類(lèi)(驗(yàn)證郵箱、手機(jī)號(hào)碼、qq號(hào)碼等)
這篇文章主要介紹了java使用正則表達(dá)式進(jìn)行表單驗(yàn)證工具類(lèi),可以驗(yàn)證郵箱、手機(jī)號(hào)碼、qq號(hào)碼等方法,需要的朋友可以參考下2014-04-04JAVA MyBatis入門(mén)學(xué)習(xí)過(guò)程記錄
MyBatis是一個(gè)支持普通SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。這篇文章主要介紹了mybatis框架入門(mén)學(xué)習(xí)教程,需要的朋友可以參考下,希望能幫助到你2021-06-06spring boot 使用Aop通知打印控制器請(qǐng)求報(bào)文和返回報(bào)文問(wèn)題
這篇文章主要介紹了spring-boot 使用Aop通知打印控制器請(qǐng)求報(bào)文和返回報(bào)文,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04springboot2版本無(wú)法加載靜態(tài)資源問(wèn)題解決
這篇文章主要介紹了springboot2版本無(wú)法加載靜態(tài)資源問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11java實(shí)現(xiàn)簡(jiǎn)單石頭剪刀布游戲
這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單石頭剪刀布游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02java中使用Files.readLines()處理文本中行數(shù)據(jù)方式
這篇文章主要介紹了java中使用Files.readLines()處理文本中行數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12