• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            雖不能至,心向往之

            —— 巴人也,操C++口音,混跡于京師,勉強度日……《史記·corelito列傳》
            posts - 8, comments - 15, trackbacks - 0, articles - 0

            相對前一篇來說,這一篇中所涉及的例子程序,在使用抽象工廠方法的前后進行了一個比較,我們能發現的是:在使用抽象工廠方法之后,程序的實現顯得更加優雅。

            這是原來的:

             1 #define MOTIF
             2 
             3 class Widget {
             4 public:
             5    virtual void draw() = 0;
             6 };
             7 
             8 class MotifButton : public Widget {
             9 public:
            10    void draw() { cout << "MotifButton\n"; }
            11 };
            12 class MotifMenu : public Widget {
            13 public:
            14    void draw() { cout << "MotifMenu\n"; }
            15 };
            16 
            17 class WindowsButton : public Widget {
            18 public:
            19    void draw() { cout << "WindowsButton\n"; }
            20 };
            21 class WindowsMenu : public Widget {
            22 public:
            23    void draw() { cout << "WindowsMenu\n"; }
            24 };
            25 
            26 void display_window_one() {
            27 #ifdef MOTIF
            28    Widget* w[] = { new MotifButton,
            29                    new MotifMenu };
            30 #else // WINDOWS
            31    Widget* w[] = { new WindowsButton,
            32                    new WindowsMenu };
            33 #endif
            34    w[0]->draw();  w[1]->draw();
            35 }
            36 
            37 void display_window_two() {
            38 #ifdef MOTIF
            39    Widget* w[] = { new MotifMenu,
            40                    new MotifButton };
            41 #else // WINDOWS
            42    Widget* w[] = { new WindowsMenu,
            43                    new WindowsButton };
            44 #endif
            45    w[0]->draw();  w[1]->draw();
            46 }
            47 
            48 int main() {
            49 #ifdef MOTIF
            50    Widget* w = new MotifButton;
            51 #else // WINDOWS
            52    Widget* w = new WindowsButton;
            53 #endif
            54    w->draw();
            55    display_window_one();
            56    display_window_two();
            57 }

            輸出為:
            MotifButton
            MotifButton
            MotifMenu
            MotifMenu
            MotifButton


            下面是使用抽象工廠方法后的程序:
             1 #define WINDOWS
             2 
             3 class Widget {
             4 public:
             5    virtual void draw() = 0;
             6 };
             7 
             8 class MotifButton : public Widget {
             9 public:
            10    void draw() { cout << "MotifButton\n"; }
            11 };
            12 class MotifMenu : public Widget {
            13 public:
            14    void draw() { cout << "MotifMenu\n"; }
            15 };
            16 
            17 class WindowsButton : public Widget {
            18 public:
            19    void draw() { cout << "WindowsButton\n"; }
            20 };
            21 class WindowsMenu : public Widget {
            22 public:
            23    void draw() { cout << "WindowsMenu\n"; }
            24 };
            25 
            26 class Factory {
            27 public:
            28    virtual Widget* create_button() = 0;
            29    virtual Widget* create_menu() = 0;
            30 };
            31 
            32 class MotifFactory : public Factory {
            33 public:
            34    Widget* create_button() {
            35       return new MotifButton; }
            36    Widget* create_menu()   {
            37       return new MotifMenu; }
            38 };
            39 
            40 class WindowsFactory : public Factory {
            41 public:
            42    Widget* create_button() {
            43       return new WindowsButton; }
            44    Widget* create_menu()   {
            45       return new WindowsMenu; }
            46 };
            47 
            48 Factory* factory;
            49 
            50 void display_window_one() {
            51    Widget* w[] = { factory->create_button(),
            52                    factory->create_menu() };
            53    w[0]->draw();  w[1]->draw();
            54 }
            55 
            56 void display_window_two() {
            57    Widget* w[] = { factory->create_menu(),
            58                    factory->create_button() };
            59    w[0]->draw();  w[1]->draw();
            60 }
            61 
            62 int main() {
            63 #ifdef MOTIF
            64    factory = new MotifFactory;
            65 #else // WINDOWS
            66    factory = new WindowsFactory;
            67 #endif
            68 
            69    Widget* w = factory->create_button();
            70    w->draw();
            71    display_window_one();
            72    display_window_two();
            73 }

            同樣的在最后的輸出:
            WindowsButton
            WindowsButton
            WindowsMenu
            WindowsMenu
            WindowsButton
            欧美精品福利视频一区二区三区久久久精品 | 久久久精品视频免费观看| 精品国际久久久久999波多野| 国产精品美女久久久m| 久久亚洲日韩看片无码| 精品国际久久久久999波多野 | 久久精品无码专区免费| 欧美性猛交xxxx免费看久久久| 色综合久久中文字幕无码| 无码人妻久久一区二区三区免费| 精品久久久久久亚洲精品 | 亚洲伊人久久精品影院| 国内精品久久久久| 久久91精品国产91久| 国产精品18久久久久久vr| 亚洲中文字幕无码久久2017 | 青青热久久国产久精品| 国产色综合久久无码有码| 亚洲国产精品久久久久久| 久久久久人妻精品一区| 久久天天躁夜夜躁狠狠躁2022| 久久综合九色欧美综合狠狠| 久久九九久精品国产免费直播| 性高湖久久久久久久久| 大美女久久久久久j久久| 久久九九精品99国产精品| 日韩AV毛片精品久久久| Xx性欧美肥妇精品久久久久久 | 亚洲精品99久久久久中文字幕 | 国产精品一区二区久久精品无码 | 性欧美大战久久久久久久| 久久夜色精品国产噜噜噜亚洲AV| 亚洲综合久久久| 国产视频久久| 国产精品无码久久综合 | 久久久久久久综合狠狠综合| 国产成人综合久久精品尤物| 99久久超碰中文字幕伊人| 色欲综合久久中文字幕网| 久久精品国产亚洲AV麻豆网站| 久久久久久亚洲精品成人|