java開(kāi)發(fā)的工廠方法模式及抽象工廠驗(yàn)證示例
工廠方法模式示例
開(kāi)發(fā)一個(gè)數(shù)據(jù)格式轉(zhuǎn)換工具,將不同數(shù)據(jù)源如:txt、excel等格式文件,轉(zhuǎn)換為XML格式輸出,需考慮今后其他格式的文件也需要轉(zhuǎn)換為xml格式的擴(kuò)展性,利用設(shè)計(jì)模式的有關(guān)知識(shí)進(jìn)行設(shè)計(jì)。
解決思路,使用工廠方法模式完成該功能的設(shè)計(jì),設(shè)計(jì)類(lèi)圖如下:

代碼結(jié)構(gòu)如下:

代碼如下:
public interface Creator {
Convertor getConvertor();
}
public class ExcelConvertorCreator implements Creator {
@Override
public Convertor getConvertor() {
return new ExcelConvertor();
}
}
public class TxtConvertorCreator implements Creator {
@Override
public Convertor getConvertor() {
return new TxtConvertor();
}
}
public interface Convertor {
void transform();
}
public class ExcelConvertor implements Convertor {
@Override
public void transform() {
System.out.println("excel轉(zhuǎn)換器");
}
}
public class TxtConvertor implements Convertor {
@Override
public void transform() {
System.out.println("txt文件轉(zhuǎn)換器");
}
}
測(cè)試代碼如下:
public class Testor {
public void factoryMethodTest() {
Creator creator = new TxtConvertorCreator();
Convertor convertor = creator.getConvertor();
convertor.transform();
}
}
運(yùn)行結(jié)果:

驗(yàn)證結(jié)論:使用工廠方法模式完成文件轉(zhuǎn)換器,滿(mǎn)足開(kāi)閉原則,在類(lèi)的劃分上滿(mǎn)足單一職責(zé)原則,使得程序易擴(kuò)展、易維護(hù)等特征;同時(shí)調(diào)用方依賴(lài)于抽象,不依賴(lài)于具體,實(shí)現(xiàn)了依賴(lài)倒置原則,所有的變量使用接口(抽象類(lèi))定義,具體的實(shí)現(xiàn)類(lèi)可以替換它,遵循了里氏替換原則。
抽象工廠模式驗(yàn)證
某公司開(kāi)發(fā)一個(gè)手機(jī)游戲軟件,該軟件需要支持IOS、windows Mobile等操作系統(tǒng)平臺(tái),針對(duì)不同操作系統(tǒng),提供不同操作控制類(lèi)和游戲界面控制類(lèi),需考慮今后其他操作系統(tǒng)也需要使用這款手游,利用設(shè)計(jì)模式的有關(guān)知識(shí)進(jìn)行設(shè)計(jì)。
解決思路,使用抽象工廠模式完成該功能的設(shè)計(jì),設(shè)計(jì)類(lèi)圖如下:

代碼結(jié)構(gòu)如下:

代碼如下:
public interface InterfaceController {
void init();
}
public class IosInterfaceControllerImpl implements InterfaceController {
@Override
public void init() {
System.out.println("蘋(píng)果界面");
}
}
public class WinInterfaceControllerImpl implements InterfaceController {
@Override
public void init() {
System.out.println("windows界面");
}
}
public interface OprationController {
public void init();
}
public class IosOprationControllerImpl implements OprationController {
@Override
public void init() {
System.out.println("蘋(píng)果操作邏輯");
}
}
public class WinOprationControllerImpl implements OprationController {
@Override
public void init() {
System.out.println("windows操作邏輯");
}
}
public interface AbstractFactory {
InterfaceController getInterfaceContorller();
OprationController getOprationController();
}
public class IosFactoryImpl implements AbstractFactory {
@Override
public InterfaceController getInterfaceContorller() {
return new IosInterfaceControllerImpl();
}
@Override
public OprationController getOprationController() {
return new IosOprationControllerImpl();
}
}
public class WinFactoryImpl implements AbstractFactory {
@Override
public InterfaceController getInterfaceContorller() {
return new WinInterfaceControllerImpl();
}
@Override
public OprationController getOprationController() {
return new WinOprationControllerImpl();
}
}
測(cè)試代碼如下:
public class AbstractFactoryTest {
public void test(){
AbstractFactory abstractFactory = new WinFactoryImpl();
OprationController oprationController = abstractFactory.getOprationController();
InterfaceController interfaceController = abstractFactory.getInterfaceContorller();
oprationController.init();
interfaceController.init();
}
}
運(yùn)行結(jié)果如下:

驗(yàn)證結(jié)論:抽象工廠模式與工廠方法模式很類(lèi)似,工廠方法模式提供了一個(gè)生產(chǎn)對(duì)象的方法,而抽象工廠模式提供多個(gè)i生產(chǎn)不同對(duì)象的方法,此種設(shè)計(jì)符合開(kāi)閉原則,程序易維護(hù)、易擴(kuò)展,如:該游戲系統(tǒng)需要在鴻蒙系統(tǒng)上運(yùn)行,則需要新開(kāi)發(fā)一個(gè)具體的鴻蒙工廠,及與鴻蒙操作系統(tǒng)相關(guān)的界面控制類(lèi)與游戲操作類(lèi)即可。另外,需要注意的是,抽象工廠模式在擴(kuò)展產(chǎn)品族時(shí)很容易,但是在產(chǎn)品等級(jí)結(jié)構(gòu)發(fā)生變化時(shí),非常不容易。
結(jié)論
以上僅給出示例代碼,非常簡(jiǎn)單,為了加深工廠方法模式的體驗(yàn),建議大家開(kāi)發(fā)完整的Txt、Excel文件轉(zhuǎn)換代碼,然后界面層設(shè)計(jì)兩個(gè)菜單,分別是Txt和Excel轉(zhuǎn)換。抽象工廠模式體驗(yàn),則可以查看jdk源碼中java.sql包數(shù)據(jù)庫(kù)處理部分源碼。
以上就是java開(kāi)發(fā)的工廠方法模式及抽象工廠驗(yàn)證示例的詳細(xì)內(nèi)容,更多關(guān)于java工廠方法模式及抽象工廠驗(yàn)證的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java MD5消息摘要算法原理及實(shí)現(xiàn)代碼
這篇文章主要介紹了Java MD5消息摘要算法原理及實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例
這篇文章主要為大家介紹了Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
springboot接收日期類(lèi)型參數(shù)的操作方法
如果使用Get請(qǐng)求,直接使用對(duì)象接收,則可以使用@DateTimeFormat注解進(jìn)行格式化,本文重點(diǎn)給大家介紹springboot接收日期類(lèi)型參數(shù)的方法,感興趣的朋友一起看看吧2024-02-02
使用mybatis插件PageHelper實(shí)現(xiàn)分頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了使用mybatis插件PageHelper實(shí)現(xiàn)分頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Java中為什么重寫(xiě)equals()也需要重寫(xiě)hashCode方法
這篇文章主要介紹了Java中為什么重寫(xiě)equals()也需要重寫(xiě)hashCode(),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Java實(shí)現(xiàn)雙端鏈表LinkedList
本文主要介紹了Java實(shí)現(xiàn)雙端鏈表LinkedList,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
關(guān)于使用POI向word中添加圖片的問(wèn)題
這篇文章主要介紹了關(guān)于使用POI向word中添加圖片的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
springboot定時(shí)任務(wù)@Scheduled執(zhí)行多次的問(wèn)題
這篇文章主要介紹了springboot定時(shí)任務(wù)@Scheduled執(zhí)行多次問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10

