设计模式--简单工厂模式
什么是工廠模式
工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯,并且是通過使用一個共同的接口來指向新創(chuàng)建的對象。
簡單的解釋
例我們將肯德基當(dāng)作一個工廠,當(dāng)我們?nèi)c餐,只需要告訴前臺,我要一個漢堡或薯條即可,我們不需要去關(guān)心漢堡是如何制作;
我們點餐的過程相當(dāng)于我們創(chuàng)建一個工廠類,告訴前臺我們要一個漢堡相當(dāng)于把名稱告訴工廠,由工廠去生產(chǎn);
而前臺告訴廚房:一個漢堡,相當(dāng)于由工廠決定我們調(diào)用哪個類、哪個對象,最終廚房把漢堡給前臺,前臺在遞到我們手中,則相當(dāng)于對象實例化完成;
- 優(yōu)點
創(chuàng)建一個對象,只需要知道名稱即可;擴展性高,增加產(chǎn)品,只需要增加對應(yīng)的工廠類; - 缺點
每增加一個產(chǎn)品,都需要對應(yīng)的工具類、工廠類;一個工廠只能生產(chǎn)一個產(chǎn)品;當(dāng)產(chǎn)品過多時,一定程序增加了系統(tǒng)的復(fù)雜性;
代碼解釋
實現(xiàn)一個計算器類,由輸入兩個數(shù)字、運算符,得到結(jié)果;
1、首先聲明一個抽象類,該抽象類只有一個方法,輸入數(shù)字,返回計算結(jié)果
2、聲明對應(yīng)的子類,繼承抽像父類,實現(xiàn)其計算方法
public class AddOperatorAction extends OperatorAction {private String operator="+";/*** 此處僅實現(xiàn)相加運算操作,其它-,*,/ 可實現(xiàn)同時的子類進行操作* @param numberFIrst* @param numberSecond* @return*/@Overridepublic Integer getResult(String numberFIrst, String numberSecond) {return Integer.valueOf(numberFIrst)+Integer.valueOf(numberSecond);} } 復(fù)制代碼3、創(chuàng)建一個簡單的工廠,根據(jù)運算符去決定實例化對應(yīng)的類
public class Action {public static OperatorAction factory(String operator){OperatorAction oper=null;switch (operator){case "+":oper=new AddOperatorAction();break;}return oper;}public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);System.out.print("簡單工廠模式,簡易計算器\n請輸入第一個數(shù)字:\n");String numberFirst=sc.nextLine();System.out.println("請輸入運算符(+、-、*、/):");String operator=sc.nextLine();System.out.println("請輸入第二個數(shù)字:");String numberSecond=sc.nextLine();OperatorAction oper=factory(operator);System.out.println("運算結(jié)果:"+oper.getResult(numberFirst,numberSecond));} } 復(fù)制代碼后記
工廠模式在Java開發(fā)中最常見的就是Spring、Hibernate,像Spring的Bean工廠,我們只需要知道bean的name就可以直接調(diào)用,而Hibernate的連接我們同樣從SessionFactory中直接獲取,通過工廠模式降低的藕合,使得在開發(fā)中變的更加容易,高效;
代碼參照:大話設(shè)計模式
名稱解釋:www.runoob.com/design-patt…
總結(jié)
以上是生活随笔為你收集整理的设计模式--简单工厂模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用component小程序
- 下一篇: 力扣(LeetCode)763