<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

              GOF《設計模式》一書對Abstract Factory模式是這樣描述的:

        為創建一組相關或相互依賴的對象提供一個接口,而且無需指定它們的具體類。
      大致意思是說:我們在創建這些對象的時候,并不需要指定它們的具體類,這些具體類的對象是由工廠對象負責實例化的。下面是《Design Patterns Explained》一書的例子,有關計算機系統的顯示和打印程序,用來顯示和打印的分辨率取決于當前運行的系統。低端機使用低分辨率的顯示和打印驅動程序,高端機使用高分辨率的顯示和打印驅動程序。其結構圖如下:


    代碼如下:

    abstract class ResFactory{

        abstract public DisplayDriver getDisplayDrvr();

        abstract public PrintDriver getPrintDrvr();

    }

    class LowResFact extends ResFactory{

        public DisplayDriver getDisplayDrvr() {

            returnnew LRDD();

        }

        public PrintDriver getPrintDrvr() {

            returnnew LRPD();

        }

       

    }

    class HighResFact extends ResFactory{

        public DisplayDriver getDisplayDrvr() {

            returnnew HRDD();

        }

        public PrintDriver getPrintDrvr() {

            returnnew HRPD();

        }

       

    }

    abstract class DisplayDriver{

       

    }

    abstract class PrintDriver{

    }

    class HRDD extends DisplayDriver{
        
    public HRDD() {
            
    System.out.println("使用高端機的顯示驅動程序")
     } 

    }

    class LRDD extends DisplayDriver{

        public LRDD(){

            System.out.println("使用低端機的顯示驅動程序");

        } 

    }

    class HRPD extends PrintDriver{

        public HRPD() {

            System.out.println("使用高端機的打印驅動程序");

        }

       

    }

    class LRPD extends PrintDriver{

        public LRPD() {

            System.out.println("使用低端機的打印驅動程序");

        } 

    }

    public class ApControl {

        public static ResFactory getResFactory(ResFactory factory){

            return factory;

        }

        public static void main(String[] args) {

            ResFactory highResFact=ApControl.getResFactory(new HighResFact());

            highResFact.getDisplayDrvr();

            highResFact.getPrintDrvr();

            ResFactory lowResFact=ApControl.getResFactory(new LowResFact());

            lowResFact.getDisplayDrvr();

            lowResFact.getPrintDrvr();

        }

    }輸出結果:

    使用高端機的顯示驅動程序

    使用高端機的打印驅動程序

    使用低端機的顯示驅動程序

    使用低端機的打印驅動程序

        在這個例子中ApControl使用派生自兩個不同的服務類(DisplayDriver和PrintDriver)的對象。這個設計非常簡化,隱藏了實現細節,系統的可維護性也更好。ApControl不知道自己擁有的服務對象的那個特定具體實現,因為創建對象是工廠的職責。ApControl也不知道自己使用的是哪個特定工廠,因為它只知道自己有一個ResFactory對象。它可能是一個HighResFact也可能是一個LowResFact,但它不知道到底是哪一個。

        小結:在必須協調一組對象的創建時,可以應用Abstract Factory模式。它提供了一種方式,將如何執行對象實例化的規則從使用這些對象的客戶對象中提取出來。首先,找出實例化的規則,定義了一個帶接口的抽象類,其中的接口為每種需要實例化的對象提供一個方法。然后,從這個類為每個組實現具體類。最后,由客戶對象決定使用具體工廠來創建所需的對象。它主要適用于以下幾種情況:

    1)     一個系統要獨立于它的產品的創建、組合和表示時。

    2)    可以對系統進行配置,以便系統可以使用多個產品系列中的某一個。

    3)    當需要強調一系列相關產品對象的設計以便進行聯合使用時。

    4)    當希望提供一個產品類庫,而只想顯示他們的接口而不是實現時。

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 亚洲乱码一二三四区国产| 亚洲欧洲综合在线| 免费污视频在线观看| 免费在线观看理论片| 国产午夜亚洲精品不卡| 国产三级免费电影| 亚洲AV色香蕉一区二区| 亚洲精品无码永久在线观看男男 | 国产午夜免费秋霞影院| 综合偷自拍亚洲乱中文字幕| 99久久免费精品视频| 亚洲一区二区在线视频| 一级A毛片免费观看久久精品| 免费国产人做人视频在线观看| 免费观看又污又黄在线观看| 成人免费视频网址| 亚洲成在人线aⅴ免费毛片| 全部免费国产潢色一级| 国产精品无码永久免费888| 国产又大又黑又粗免费视频| 免费人成网上在线观看| 91麻豆国产自产在线观看亚洲| 你懂的免费在线观看网站| 国产亚洲精品久久久久秋霞| 暖暖日本免费中文字幕| 亚洲激情视频网站| 国产成人综合久久精品免费| 亚欧乱色国产精品免费视频| 亚洲国产综合精品中文第一区| 97国免费在线视频| 亚洲国产成人精品无码区在线网站| 最近的免费中文字幕视频 | 亚洲狠狠婷婷综合久久| 亚洲精品A在线观看| 国产成人综合亚洲绿色| 国产亚洲一区二区三区在线不卡 | aa在线免费观看| 亚洲精品在线网站| 成人伊人亚洲人综合网站222| 偷自拍亚洲视频在线观看 | 亚洲一区电影在线观看|