• <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
            亚洲欧美一级久久精品| 996久久国产精品线观看| 亚洲天堂久久久| 久久久久久亚洲精品成人| 91久久精品电影| 亚洲欧美国产日韩综合久久| 久久夜色精品国产欧美乱| 久久精品国产精品亜洲毛片| 成人午夜精品无码区久久| 狠狠久久综合| 欧美久久综合性欧美| 久久亚洲国产最新网站| 国产精品99久久久久久董美香| 97久久国产综合精品女不卡 | 久久美女网站免费| 亚洲午夜久久久久久久久久| 国产综合免费精品久久久| 久久久久久亚洲AV无码专区| 久久久久久久免费视频| 国产毛片久久久久久国产毛片| 久久久久久夜精品精品免费啦| 人妻无码精品久久亚瑟影视| 久久97久久97精品免视看| 久久久久久亚洲Av无码精品专口| 久久久久久久久66精品片| 久久婷婷五月综合成人D啪| 国产AV影片久久久久久| 中文字幕亚洲综合久久| 久久综合88熟人妻| 久久精品a亚洲国产v高清不卡| 精品久久人人爽天天玩人人妻| 少妇久久久久久被弄到高潮| 久久久久国产精品嫩草影院| 久久久精品久久久久久 | 亚洲国产精品久久电影欧美| 国产精品久久久香蕉| 久久精品国产精品亚洲精品| 亚洲日本久久久午夜精品| 久久99精品久久久大学生| 亚洲精品无码久久久影院相关影片 | 亚洲国产成人精品91久久久 |