Java設(shè)計模式編程中簡單工廠與抽象工廠模式的使用實例
簡單工廠模式
類圖
通過一個工廠類,以一個條件來創(chuàng)建對應(yīng)的對象
//業(yè)務(wù)功能 public interface ICalculation { double getResult(double numA, double numB); } public class CalcAdd implements ICalculation { @Override public double getResult(double numA, double numB) { System.out.println("加法"); return numA + numB; } } public class CalcSubtract implements ICalculation { @Override public double getResult(double numA, double numB) { System.out.println("減法"); return numA - numB; } } /* * 簡單工廠模式 關(guān)注:對象的創(chuàng)建 * 建立一個工廠類,對實現(xiàn)了同一接口的或者是存在繼承關(guān)系的一些類進行實例的創(chuàng)建 */ public class Test4Simple { public static void main(String[] args) { // String operation = "/"; String operation = "+"; // String operation = "-"; // String operation = "*"; double numA = 182, numB = 33; ICalculation createCalc = CalcSimpleFactory.createCalc(operation); double result = createCalc.getResult(numA, numB); System.out.println(result); } }
簡單工廠的缺陷: 簡單工廠創(chuàng)建產(chǎn)品時需要傳遞相應(yīng)的參數(shù),如果傳遞不正確就取不到對象了。
改進:多方法創(chuàng)建不同產(chǎn)品
類圖
public class CalcMultipleFactory { public static ICalculation produceAdd() { return new CalcAdd(); } public static ICalculation produceSubtract() { return new CalcSubtract(); } public static ICalculation produceMultiply() { return new CalcMultiply(); } public static ICalculation produceDivide() { return new CalcDivide(); } } public class Test4Multiple { public static void main(String[] args) { double numA = 182, numB = 33; ICalculation createCalc = CalcMultipleFactory.produceAdd(); double result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceSubtract(); result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceMultiply(); result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceDivide(); result = createCalc.getResult(numA, numB); System.out.println(result); } }
抽象工廠模式
里面有幾個概念:抽象工廠、實體工廠、抽象產(chǎn)品、實體產(chǎn)品
抽象工廠:定義創(chuàng)建產(chǎn)品的抽象方法
實體工廠:具體的創(chuàng)建哪種產(chǎn)品
抽象產(chǎn)品:一個接口或基類
實體產(chǎn)品:實現(xiàn)具體功能,或派生
類圖
//抽象產(chǎn)品1 public interface IProduct1 { public void show(); } //抽象產(chǎn)品2 public interface IProduct2 { public void show(); } //實體產(chǎn)品1 public class Product1 implements IProduct1 { public void show() { System.out.println("創(chuàng)建了1型產(chǎn)品"); } } //實體產(chǎn)品2 public class Product2 implements IProduct2 { public void show() { System.out.println("創(chuàng)建了2型產(chǎn)品"); } } /* * 1A 1B屬于Product1 同一產(chǎn)品等級結(jié)構(gòu)中 * 2A 2B屬于Product2 */ public class GradeProduct1A extends Product1 { @Override public void show() { super.show(); System.out.println("這是產(chǎn)品1下的:產(chǎn)品A"); } } public class GradeProduct1B extends Product1 { @Override public void show() { super.show(); System.out.println("這是產(chǎn)品1下的:產(chǎn)品B"); } } public class GradeProduct2A extends Product2 { @Override public void show() { super.show(); System.out.println("這是產(chǎn)品2下的:產(chǎn)品A"); } } public class GradeProduct2B extends Product2 { @Override public void show() { super.show(); System.out.println("這是產(chǎn)品2下的:產(chǎn)品B"); } } //抽象工廠 創(chuàng)建不同的抽象產(chǎn)品 public interface IFactory { public IProduct1 createProduct1A();//1類產(chǎn)品 型號A public IProduct1 createProduct1B();//1類產(chǎn)品 型號B public IProduct2 createProduct2A();//2類產(chǎn)品 型號A public IProduct2 createProduct2B();//2類產(chǎn)品 型號B } //實體工廠 創(chuàng)建實體產(chǎn)品,返回類型為抽象產(chǎn)品 public class Factory implements IFactory { public IProduct1 createProduct1A() { return new GradeProduct1A(); } public IProduct1 createProduct1B() { return new GradeProduct1B(); } public IProduct2 createProduct2A() { return new GradeProduct2A(); } public IProduct2 createProduct2B() { return new GradeProduct2B(); } } /* * 抽象工廠模式:用來創(chuàng)建一組相關(guān)或者相互依賴的對象 * * 流程:抽象工廠,實體工廠 生產(chǎn)產(chǎn)品 * 抽象產(chǎn)品,實體產(chǎn)品 實現(xiàn)產(chǎn)品功能 * 缺點:當需要增加一個產(chǎn)品(由抽象和實體構(gòu)成),工廠都需要更改 */ public class Test4Abstract { public static void main(String[] args) { IFactory factory = new Factory(); IProduct1 product1a = factory.createProduct1A(); product1a.show(); IProduct1 product1b = factory.createProduct1B(); product1b.show(); IProduct2 product2a = factory.createProduct2A(); product2a.show(); IProduct2 product2b = factory.createProduct2B(); product2b.show(); } }
- Java創(chuàng)建型設(shè)計模式之抽象工廠模式(Abstract?Factory)
- Java設(shè)計模式之抽象工廠模式淺析講解
- Java設(shè)計模式之抽象工廠模式(Abstract?Factory)
- Java?深入理解創(chuàng)建型設(shè)計模式之抽象工廠模式
- 深入理解Java設(shè)計模式之抽象工廠模式
- Java設(shè)計模式之簡單工廠 工廠方法 抽象工廠深度總結(jié)
- Java設(shè)計模式之抽象工廠模式詳解
- Java設(shè)計模式之工廠模式分析【簡單工廠、工廠方法、抽象工廠】
- Java設(shè)計模式之抽象工廠模式
- Java設(shè)計模式筆記之抽象工廠代碼示例
- Java設(shè)計模式之抽象工廠模式實例詳解
- Java設(shè)計模式編程中的工廠方法模式和抽象工廠模式
- Java設(shè)計模式之工廠方法和抽象工廠
相關(guān)文章
Spring MVC-@RequestMapping注解詳解
@RequestMapping注解的作用,就是將請求和處理請求的控制器方法關(guān)聯(lián)起來,建立映射關(guān)系。這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-04-04分布式醫(yī)療掛號系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用
這篇文章主要為大家介紹了分布式醫(yī)療掛號系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04Java并發(fā)編程之LongAdder執(zhí)行情況解析
這篇文章主要為大家介紹了Java并發(fā)編程之LongAdder執(zhí)行情況解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04Mybatis中一條SQL使用兩個foreach的問題及解決
這篇文章主要介紹了Mybatis中一條SQL使用兩個foreach的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02快速解決VS Code報錯:Java 11 or more recent is required to run. Ple
這篇文章主要介紹了快速解決VS Code報錯:Java 11 or more recent is required to run. Please download and install a recent JDK的相關(guān)資料,需要的朋友可以參考下2020-09-09基于Java反射的map自動裝配JavaBean工具類設(shè)計示例代碼
這篇文章主要給大家介紹了關(guān)于基于Java反射的map自動裝配JavaBean工具類設(shè)計的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起看看吧2018-10-10