• <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++口音,混跡于京師,勉強(qiáng)度日……《史記·corelito列傳》
            posts - 8, comments - 15, trackbacks - 0, articles - 0

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

            這是原來的:

             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
            亚洲综合久久夜AV | 99久久国产综合精品网成人影院| 久久经典免费视频| 久久成人18免费网站| 国产一区二区久久久| 国产精品一久久香蕉产线看| 狠狠色伊人久久精品综合网 | 国产精品福利一区二区久久| 91久久精品国产免费直播| 久久久久久精品久久久久| 色偷偷888欧美精品久久久| 久久无码AV一区二区三区| 久久国产高清字幕中文| 区久久AAA片69亚洲 | 久久久久亚洲AV片无码下载蜜桃| 国产美女久久精品香蕉69| 色综合久久88色综合天天 | 久久久久久综合一区中文字幕 | 久久久久久国产精品无码超碰| 久久av免费天堂小草播放| 欧美午夜精品久久久久免费视| 亚洲成av人片不卡无码久久| 中文字幕亚洲综合久久2| 色88久久久久高潮综合影院| 欧美激情精品久久久久久久| 国产综合免费精品久久久| 91精品国产91久久久久久青草| 久久精品国产亚洲av麻豆色欲| 精品久久亚洲中文无码| 色老头网站久久网| 香蕉久久影院| 久久这里有精品视频| 久久精品无码一区二区app| 爱做久久久久久| 99久久国产亚洲高清观看2024 | 久久综合色区| 日本精品久久久久久久久免费| 久久国产美女免费观看精品| 久久精品成人欧美大片| 伊人热热久久原色播放www| 一个色综合久久|