• <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
            人妻少妇久久中文字幕一区二区 | 99久久综合国产精品二区| 三级片免费观看久久| 国产精品免费久久久久影院| 精品久久久久久无码中文字幕一区| 久久婷婷五月综合国产尤物app| 欧美日韩精品久久久久| 久久综合伊人77777| 亚洲精品成人久久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 色8激情欧美成人久久综合电| 久久亚洲国产精品五月天婷| 久久五月精品中文字幕| 久久久久亚洲AV无码专区网站| 国产精品99久久不卡| 欧美色综合久久久久久| 伊人久久精品影院| 色婷婷综合久久久久中文 | 99久久国产亚洲高清观看2024| 久久综合久久久| 久久国产视频99电影| 久久综合久久鬼色| 久久九九久精品国产免费直播| 久久久久se色偷偷亚洲精品av| 久久水蜜桃亚洲av无码精品麻豆| 久久99国内精品自在现线| 麻豆精品久久精品色综合| 久久久久久毛片免费看| 久久中文字幕人妻丝袜| 精品国产91久久久久久久| 久久久久亚洲精品中文字幕| 久久精品人妻中文系列| 伊人色综合久久天天| 日本欧美国产精品第一页久久| 97精品国产97久久久久久免费 | 麻豆亚洲AV永久无码精品久久| 97久久超碰国产精品旧版| 久久久噜噜噜久久| 99麻豆久久久国产精品免费| 一级做a爰片久久毛片免费陪| 久久精品国产亚洲欧美|