<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一综合av一区| 亚洲youjizz| 国产美女无遮挡免费视频网站| 国产精品成人69XXX免费视频| 亚洲一区二区三区丝袜| 午夜亚洲国产理论秋霞| 久久久久亚洲精品无码网址 | 日本免费的一级v一片| 免费无码VA一区二区三区| 黄页网站在线观看免费| 亚洲日韩av无码中文| 亚洲国产av美女网站| 亚洲欧洲免费视频| 国产AV无码专区亚洲A∨毛片| 九月婷婷亚洲综合在线| 日日夜夜精品免费视频| 成人看的午夜免费毛片| 国产免费的野战视频| 91青青青国产在观免费影视| a在线免费观看视频| 中文字幕手机在线免费看电影| 老外毛片免费视频播放| 在线看亚洲十八禁网站| 亚洲AV无码AV日韩AV网站| 亚洲日本VA中文字幕久久道具| 亚洲av无码专区在线| 亚洲一区动漫卡通在线播放| 91午夜精品亚洲一区二区三区| 亚洲精品无码不卡| 亚洲国产精久久久久久久| 久久国产亚洲高清观看| 亚洲一区二区中文| 久久久婷婷五月亚洲97号色 | 日本免费xxxx| 国产a视频精品免费观看| 久久久久久精品成人免费图片| 亚洲视频免费在线看| 中文字幕无码免费久久99| 中国在线观看免费高清完整版| 扒开双腿猛进入爽爽免费视频| 免费无码黄十八禁网站在线观看|