<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

    主站蜘蛛池模板: 国产aⅴ无码专区亚洲av麻豆| 成人免费午夜无码视频| 亚洲精品97久久中文字幕无码| 亚洲综合激情五月丁香六月| 成年人免费网站在线观看| 亚洲人成www在线播放| 无码视频免费一区二三区| 亚洲精品无码高潮喷水A片软| 日韩精品免费电影| 国产成人精品亚洲| 久久久久无码专区亚洲av | 国产精品亚洲二区在线观看 | 亚洲人午夜射精精品日韩| 青青视频免费在线| 亚洲日韩在线观看| 永久在线观看免费视频| 久久亚洲私人国产精品vA| 麻豆视频免费观看| 亚洲国产日韩a在线播放| 亚洲成a人片在线播放| 最近免费mv在线观看动漫| 亚洲精品美女在线观看播放| 韩国免费一级成人毛片| 朝桐光亚洲专区在线中文字幕| 亚洲国产高清精品线久久| 久久免费线看线看| 亚洲制服在线观看| 日韩亚洲精品福利| 亚欧免费一级毛片| 亚洲GV天堂无码男同在线观看| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲自偷自拍另类图片二区| 成人毛片免费观看| 国产精品福利片免费看| 亚洲精品国产第1页| 免费乱码中文字幕网站| 欧洲精品99毛片免费高清观看| 亚洲午夜精品久久久久久app| 亚洲午夜精品第一区二区8050| 57pao一国产成视频永久免费| 特级毛片A级毛片免费播放|