<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 工廠三兄弟之抽象工廠模式(四) 4 完整解決方案 Sunny公司開發人員使用抽象工廠模式來重構界面皮膚庫的設計,其基本結構如圖6所示: ![](http://img.blog.csdn.net/20130713164620203?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZUxpb24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 圖6 界面皮膚庫結構圖 在圖6中,SkinFactory接口充當抽象工廠,其子類SpringSkinFactory和SummerSkinFactory充當具體工廠,接口Button、TextField和ComboBox充當抽象產品,其子類SpringButton、SpringTextField、SpringComboBox和SummerButton、SummerTextField、SummerComboBox充當具體產品。完整代碼如下所示: ``` //在本實例中我們對代碼進行了大量簡化,實際使用時,界面組件的初始化代碼較為復雜,還需要使用JDK中一些已有類,為了突出核心代碼,在此只提供框架代碼和演示輸出。 //按鈕接口:抽象產品 interface Button { public void display(); } //Spring按鈕類:具體產品 class SpringButton implements Button { public void display() { System.out.println("顯示淺綠色按鈕。"); } } //Summer按鈕類:具體產品 class SummerButton implements Button { public void display() { System.out.println("顯示淺藍色按鈕。"); } } //文本框接口:抽象產品 interface TextField { public void display(); } //Spring文本框類:具體產品 class SpringTextField implements TextField { public void display() { System.out.println("顯示綠色邊框文本框。"); } } //Summer文本框類:具體產品 class SummerTextField implements TextField { public void display() { System.out.println("顯示藍色邊框文本框。"); } } //組合框接口:抽象產品 interface ComboBox { public void display(); } //Spring組合框類:具體產品 class SpringComboBox implements ComboBox { public void display() { System.out.println("顯示綠色邊框組合框。"); } } //Summer組合框類:具體產品 class SummerComboBox implements ComboBox { public void display() { System.out.println("顯示藍色邊框組合框。"); } } //界面皮膚工廠接口:抽象工廠 interface SkinFactory { public Button createButton(); public TextField createTextField(); public ComboBox createComboBox(); } //Spring皮膚工廠:具體工廠 class SpringSkinFactory implements SkinFactory { public Button createButton() { return new SpringButton(); } public TextField createTextField() { return new SpringTextField(); } public ComboBox createComboBox() { return new SpringComboBox(); } } //Summer皮膚工廠:具體工廠 class SummerSkinFactory implements SkinFactory { public Button createButton() { return new SummerButton(); } public TextField createTextField() { return new SummerTextField(); } public ComboBox createComboBox() { return new SummerComboBox(); } } ``` 為了讓系統具備良好的靈活性和可擴展性,我們引入了工具類XMLUtil和配置文件,其中,XMLUtil類的代碼如下所示: ``` import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.SAXException; import java.io.*; public class XMLUtil { //該方法用于從XML配置文件中提取具體類類名,并返回一個實例對象 public static Object getBean() { try { //創建文檔對象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File("config.xml")); //獲取包含類名的文本節點 NodeList nl = doc.getElementsByTagName("className"); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); //通過類名生成實例對象并將其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; } catch(Exception e) { e.printStackTrace(); return null; } } } ``` 配置文件config.xml中存儲了具體工廠類的類名,代碼如下所示: ``` <?xml version="1.0"?> <config> <className>SpringSkinFactory</className> </config> 編寫如下客戶端測試代碼: [java] view plain copy class Client { public static void main(String args[]) { //使用抽象層定義 SkinFactory factory; Button bt; TextField tf; ComboBox cb; factory = (SkinFactory)XMLUtil.getBean(); bt = factory.createButton(); tf = factory.createTextField(); cb = factory.createComboBox(); bt.display(); tf.display(); cb.display(); } } ``` 編譯并運行程序,輸出結果如下: ``` 顯示淺綠色按鈕。 顯示綠色邊框文本框。 顯示綠色邊框組合框。 ``` 如果需要更換皮膚,只需修改配置文件即可,在實際環境中,我們可以提供可視化界面,例如菜單或者窗口來修改配置文件,用戶無須直接修改配置文件。如果需要增加新的皮膚,只需增加一族新的具體組件并對應提供一個新的具體工廠,修改配置文件即可使用新的皮膚,原有代碼無須修改,符合“開閉原則”。 擴展 > 在真實項目開發中,我們通常會為配置文件提供一個可視化的編輯界面,類似Struts框架中的struts.xml編輯器,大家可以自行開發一個簡單的圖形化工具來修改配置文件,實現真正的純界面操作。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看