工廠方法模式示例
開發(fā)一個數(shù)據(jù)格式轉(zhuǎn)換工具,將不同數(shù)據(jù)源如:txt、excel等格式文件,轉(zhuǎn)換為XML格式輸出,需考慮今后其他格式的文件也需要轉(zhuǎn)換為xml格式的擴(kuò)展性,利用設(shè)計模式的有關(guān)知識進(jìn)行設(shè)計。
解決思路,使用工廠方法模式完成該功能的設(shè)計,設(shè)計類圖如下:
代碼結(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)換器"); } }
測試代碼如下:
public class Testor { public void factoryMethodTest() { Creator creator = new TxtConvertorCreator(); Convertor convertor = creator.getConvertor(); convertor.transform(); } }
運(yùn)行結(jié)果:
驗(yàn)證結(jié)論:使用工廠方法模式完成文件轉(zhuǎn)換器,滿足開閉原則,在類的劃分上滿足單一職責(zé)原則,使得程序易擴(kuò)展、易維護(hù)等特征;同時調(diào)用方依賴于抽象,不依賴于具體,實(shí)現(xiàn)了依賴倒置原則,所有的變量使用接口(抽象類)定義,具體的實(shí)現(xiàn)類可以替換它,遵循了里氏替換原則。
抽象工廠模式驗(yàn)證
某公司開發(fā)一個手機(jī)游戲軟件,該軟件需要支持IOS、windows Mobile等操作系統(tǒng)平臺,針對不同操作系統(tǒng),提供不同操作控制類和游戲界面控制類,需考慮今后其他操作系統(tǒng)也需要使用這款手游,利用設(shè)計模式的有關(guān)知識進(jìn)行設(shè)計。
解決思路,使用抽象工廠模式完成該功能的設(shè)計,設(shè)計類圖如下:
代碼結(jié)構(gòu)如下:
代碼如下:
public interface InterfaceController { void init(); } public class IosInterfaceControllerImpl implements InterfaceController { @Override public void init() { System.out.println("蘋果界面"); } } 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("蘋果操作邏輯"); } } 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(); } }
測試代碼如下:
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é)論:抽象工廠模式與工廠方法模式很類似,工廠方法模式提供了一個生產(chǎn)對象的方法,而抽象工廠模式提供多個i生產(chǎn)不同對象的方法,此種設(shè)計符合開閉原則,程序易維護(hù)、易擴(kuò)展,如:該游戲系統(tǒng)需要在鴻蒙系統(tǒng)上運(yùn)行,則需要新開發(fā)一個具體的鴻蒙工廠,及與鴻蒙操作系統(tǒng)相關(guān)的界面控制類與游戲操作類即可。另外,需要注意的是,抽象工廠模式在擴(kuò)展產(chǎn)品族時很容易,但是在產(chǎn)品等級結(jié)構(gòu)發(fā)生變化時,非常不容易。
結(jié)論
以上僅給出示例代碼,非常簡單,為了加深工廠方法模式的體驗(yàn),建議大家開發(fā)完整的Txt、Excel文件轉(zhuǎn)換代碼,然后界面層設(shè)計兩個菜單,分別是Txt和Excel轉(zhuǎn)換。抽象工廠模式體驗(yàn),則可以查看jdk源碼中java.sql包數(shù)據(jù)庫處理部分源碼。
以上就是java開發(fā)的工廠方法模式及抽象工廠驗(yàn)證示例的詳細(xì)內(nèi)容,更多關(guān)于java工廠方法模式及抽象工廠驗(yàn)證的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!
原文鏈接:https://blog.csdn.net/guoyp2126/article/details/120523338