Java設(shè)計(jì)模式編程中簡(jiǎn)單工廠(chǎng)與抽象工廠(chǎng)模式的使用實(shí)例
簡(jiǎn)單工廠(chǎng)模式
類(lèi)圖

通過(guò)一個(gè)工廠(chǎng)類(lèi),以一個(gè)條件來(lái)創(chuàng)建對(duì)應(yīng)的對(duì)象
//業(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;
}
}
/*
* 簡(jiǎn)單工廠(chǎng)模式 關(guān)注:對(duì)象的創(chuàng)建
* 建立一個(gè)工廠(chǎng)類(lèi),對(duì)實(shí)現(xiàn)了同一接口的或者是存在繼承關(guān)系的一些類(lèi)進(jìn)行實(shí)例的創(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);
}
}
簡(jiǎn)單工廠(chǎng)的缺陷: 簡(jiǎn)單工廠(chǎng)創(chuàng)建產(chǎn)品時(shí)需要傳遞相應(yīng)的參數(shù),如果傳遞不正確就取不到對(duì)象了。
改進(jìn):多方法創(chuàng)建不同產(chǎn)品
類(lèi)圖

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ǎng)模式
里面有幾個(gè)概念:抽象工廠(chǎng)、實(shí)體工廠(chǎng)、抽象產(chǎn)品、實(shí)體產(chǎn)品
抽象工廠(chǎng):定義創(chuàng)建產(chǎn)品的抽象方法
實(shí)體工廠(chǎng):具體的創(chuàng)建哪種產(chǎn)品
抽象產(chǎn)品:一個(gè)接口或基類(lèi)
實(shí)體產(chǎn)品:實(shí)現(xiàn)具體功能,或派生
類(lèi)圖

//抽象產(chǎn)品1
public interface IProduct1 {
public void show();
}
//抽象產(chǎn)品2
public interface IProduct2 {
public void show();
}
//實(shí)體產(chǎn)品1
public class Product1 implements IProduct1 {
public void show() {
System.out.println("創(chuàng)建了1型產(chǎn)品");
}
}
//實(shí)體產(chǎn)品2
public class Product2 implements IProduct2 {
public void show() {
System.out.println("創(chuàng)建了2型產(chǎn)品");
}
}
/*
* 1A 1B屬于Product1 同一產(chǎn)品等級(jí)結(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");
}
}
//抽象工廠(chǎng) 創(chuàng)建不同的抽象產(chǎn)品
public interface IFactory {
public IProduct1 createProduct1A();//1類(lèi)產(chǎn)品 型號(hào)A
public IProduct1 createProduct1B();//1類(lèi)產(chǎn)品 型號(hào)B
public IProduct2 createProduct2A();//2類(lèi)產(chǎn)品 型號(hào)A
public IProduct2 createProduct2B();//2類(lèi)產(chǎn)品 型號(hào)B
}
//實(shí)體工廠(chǎng) 創(chuàng)建實(shí)體產(chǎn)品,返回類(lèi)型為抽象產(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();
}
}
/*
* 抽象工廠(chǎng)模式:用來(lái)創(chuàng)建一組相關(guān)或者相互依賴(lài)的對(duì)象
*
* 流程:抽象工廠(chǎng),實(shí)體工廠(chǎng) 生產(chǎn)產(chǎn)品
* 抽象產(chǎn)品,實(shí)體產(chǎn)品 實(shí)現(xiàn)產(chǎn)品功能
* 缺點(diǎn):當(dāng)需要增加一個(gè)產(chǎn)品(由抽象和實(shí)體構(gòu)成),工廠(chǎng)都需要更改
*/
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è)計(jì)模式之抽象工廠(chǎng)模式(Abstract?Factory)
- Java設(shè)計(jì)模式之抽象工廠(chǎng)模式淺析講解
- Java設(shè)計(jì)模式之抽象工廠(chǎng)模式(Abstract?Factory)
- Java?深入理解創(chuàng)建型設(shè)計(jì)模式之抽象工廠(chǎng)模式
- 深入理解Java設(shè)計(jì)模式之抽象工廠(chǎng)模式
- Java設(shè)計(jì)模式之簡(jiǎn)單工廠(chǎng) 工廠(chǎng)方法 抽象工廠(chǎng)深度總結(jié)
- Java設(shè)計(jì)模式之抽象工廠(chǎng)模式詳解
- Java設(shè)計(jì)模式之工廠(chǎng)模式分析【簡(jiǎn)單工廠(chǎng)、工廠(chǎng)方法、抽象工廠(chǎng)】
- Java設(shè)計(jì)模式之抽象工廠(chǎng)模式
- Java設(shè)計(jì)模式筆記之抽象工廠(chǎng)代碼示例
- Java設(shè)計(jì)模式之抽象工廠(chǎng)模式實(shí)例詳解
- Java設(shè)計(jì)模式編程中的工廠(chǎng)方法模式和抽象工廠(chǎng)模式
- Java設(shè)計(jì)模式之工廠(chǎng)方法和抽象工廠(chǎng)
相關(guān)文章
Spring MVC-@RequestMapping注解詳解
@RequestMapping注解的作用,就是將請(qǐng)求和處理請(qǐng)求的控制器方法關(guān)聯(lián)起來(lái),建立映射關(guān)系。這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用
這篇文章主要為大家介紹了分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Java并發(fā)編程之LongAdder執(zhí)行情況解析
這篇文章主要為大家介紹了Java并發(fā)編程之LongAdder執(zhí)行情況解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Mybatis中一條SQL使用兩個(gè)foreach的問(wèn)題及解決
這篇文章主要介紹了Mybatis中一條SQL使用兩個(gè)foreach的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
快速解決VS Code報(bào)錯(cuò):Java 11 or more recent is required to run. Ple
這篇文章主要介紹了快速解決VS Code報(bào)錯(cuò):Java 11 or more recent is required to run. Please download and install a recent JDK的相關(guān)資料,需要的朋友可以參考下2020-09-09
基于Java反射的map自動(dòng)裝配JavaBean工具類(lèi)設(shè)計(jì)示例代碼
這篇文章主要給大家介紹了關(guān)于基于Java反射的map自動(dòng)裝配JavaBean工具類(lèi)設(shè)計(jì)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2018-10-10

