• <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
            久久久久一区二区三区| 性做久久久久久久久浪潮| 欧美牲交A欧牲交aⅴ久久 | 久久国产乱子伦免费精品| 久久精品国产亚洲av麻豆小说| 精品国产乱码久久久久久1区2区| 国产激情久久久久影院| 久久久噜噜噜久久中文字幕色伊伊| 久久亚洲精品人成综合网| 亚洲午夜精品久久久久久人妖| 思思久久好好热精品国产| 2022年国产精品久久久久| 亚洲欧美国产日韩综合久久| 国产精品久久久久久搜索| 一本久道久久综合狠狠躁AV| 国产精品久久亚洲不卡动漫| 中文字幕无码av激情不卡久久| 精品久久一区二区三区| 久久久国产打桩机| 日韩AV毛片精品久久久| 国内精品久久久久影院一蜜桃| 久久99这里只有精品国产| 伊人色综合久久天天| 久久国产免费观看精品3| 亚洲精品第一综合99久久| 国产免费久久久久久无码| 人人狠狠综合久久亚洲88| 国产国产成人精品久久| 无遮挡粉嫩小泬久久久久久久| 一级女性全黄久久生活片免费 | 久久婷婷国产综合精品| 久久人人爽人人爽人人片AV麻烦 | 久久九九有精品国产23百花影院| 久久婷婷国产剧情内射白浆| 午夜精品久久久久久影视777| 国产综合免费精品久久久| 色综合久久中文综合网| 免费精品99久久国产综合精品| 久久香蕉国产线看观看乱码| 97久久精品无码一区二区| 国产91色综合久久免费|