<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免费观看| 一级毛片**免费看试看20分钟| 国产成人综合亚洲绿色| 无码国产精品一区二区免费模式 | 无套内射无矿码免费看黄| 99re在线这里只有精品免费| 青青草国产免费久久久91| 亚洲国产精品乱码一区二区 | 精品久久久久久无码免费| 无码国产精品一区二区免费| 亚洲AV日韩精品一区二区三区 | 免费在线看污视频| 日本一区免费电影| 亚洲最大的视频网站| 一区二区三区免费视频观看| 成年人在线免费看视频| 亚洲av无码乱码国产精品| 一级日本高清视频免费观看| 免费看美女被靠到爽的视频| 亚洲精品在线网站| 免费看无码特级毛片| 久久久久亚洲AV成人网| 国产亚洲精品美女久久久久久下载| 在线a级毛片免费视频| 久久亚洲精精品中文字幕| a级毛片100部免费观看| 亚洲中文字幕无码一久久区| 三年片在线观看免费观看大全中国| 大陆一级毛片免费视频观看| 自拍日韩亚洲一区在线| 性xxxxx免费视频播放| 亚洲高清中文字幕综合网| 日日麻批免费40分钟无码| 亚洲五月六月丁香激情| 免费人成视频在线观看网站| 亚洲网站在线观看| 2020久久精品国产免费| 亚洲精品免费网站| 免费无码看av的网站| 特级毛片A级毛片100免费播放| 国产jizzjizz免费视频|