• <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>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            設(shè)計(jì)模式之Adapter模式和Template Method模式

            Adpater(適配器)模式接受一種類型并提供其他類型的接口。它用在具相同思想的的,只是表達(dá)方式不同的類或函數(shù)中。
            例如:斐波那契數(shù)列發(fā)生類
            #ifndef FIBONACCIGENERATOR_H
            #define FIBONACCIGENERATOR_H

            class FibonacciGenerator {
              int n;
              int val[2];
            public:
              FibonacciGenerator() : n(0) { val[0] = val[1] = 0; }
              int operator()() {
                int result = n > 2 ? val[0] + val[1] : n > 0 ? 1 : 0;
                ++n;
                val[0] = val[1];
                val[1] = result;
                return result;
              }
              int count() { return n; }
            };
            #endif // FIBONACCIGENERATOR_H ///:~
            調(diào)用operator()來使用它。下面是使用Adpater模式的實(shí)現(xiàn)代碼
            include <iostream>
            #include <numeric>
            #include "FibonacciGenerator.h"
            #include "../C06/PrintSequence.h"
            using namespace std;

            class FibonacciAdapter { // Produce an iterator
              FibonacciGenerator f;
              int length;
            public:
              FibonacciAdapter(int size) : length(size) {}//通過斐波那契數(shù)列的長度來初始化類。它對輸入迭代器的約束條件比較嚴(yán)格
              class iterator;
              friend class iterator;
              class iterator : public std::iterator<
                std::input_iterator_tag, FibonacciAdapter, ptrdiff_t> {
                FibonacciAdapter& ap;
              public:
                typedef int value_type;
                iterator(FibonacciAdapter& a) : ap(a) {}
                bool operator==(const iterator&) const {
                  return ap.f.count() == ap.length;
                }
                bool operator!=(const iterator& x) const {
                  return !(*this == x);
                }
                int operator*() const { return ap.f(); }
                iterator& operator++() { return *this; }
                iterator operator++(int) { return *this; }
              };
              iterator begin() { return iterator(*this); }
              iterator end() { return iterator(*this); }
            };
            int main() {
              const int SZ = 20;
              FibonacciAdapter a1(SZ);
              cout << "accumulate: "
                << accumulate(a1.begin(), a1.end(), 0) << endl;
              FibonacciAdapter a2(SZ), a3(SZ);
              cout << "inner product: "
                << inner_product(a2.begin(), a2.end(), a3.begin(), 0)
                << endl;
              FibonacciAdapter a4(SZ);
              int r1[SZ] = {0};
              int* end = partial_sum(a4.begin(), a4.end(), r1);
              print(r1, end, "partial_sum", " ");
              FibonacciAdapter a5(SZ);
              int r2[SZ] = {0};
              end = adjacent_difference(a5.begin(), a5.end(), r2);
              print(r2, end, "adjacent_difference", " ");
            } ///:~

            Template Method(模板模式)通過調(diào)用基類的不同函數(shù)來驅(qū)動程序運(yùn)行。 它的一個重要特征:定義在基類中(有時(shí)作為一個私有成員函數(shù))并且不能改動。例如:
            #include <iostraem>
            using namespace std;

            class ApplicationFrameword{
            protected:
            virtral void custmoize1()= 0;
            virtral void custmoize2()=0;
            public:
            void templateMethod()
            {
            for(int i =0;i <5; ++i)
            {
            custmoize1();
            custmoize2();
            }
            }
            };

            //create a new "application"
            class MyApp:public ApplicationFramework{
            protected:
            void custmoize1()
            {
            cout << "Hello";
            }
            void custmoize2()
            {
            cout << "World!"<<endl;
            }

            int main()
            {
            MyApp app;
            app.templateMethod();
            }
            驅(qū)動應(yīng)用程序運(yùn)行的“引擎”就是模板方法模式。在GUI中,這個引擎就是主要的時(shí)間環(huán),客戶端只要提供customize1()和custmoize2()的定義就可以運(yùn)行程序。
            }
            }

            posted on 2009-04-12 14:02 Benjamin 閱讀(290) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            2021久久精品国产99国产精品| 99久久99久久| 久久久久久综合一区中文字幕| 久久久99精品成人片中文字幕| 久久香蕉国产线看观看精品yw| 亚洲嫩草影院久久精品| 香蕉99久久国产综合精品宅男自 | 久久亚洲日韩看片无码| 香蕉久久久久久狠狠色| 国产精品久久久久a影院| 久久久久久久综合日本亚洲| 欧美国产成人久久精品| 精品久久久久久无码中文字幕一区| 久久水蜜桃亚洲av无码精品麻豆| 久久久久亚洲Av无码专| 久久夜色精品国产噜噜亚洲a| 狠狠综合久久AV一区二区三区| 偷偷做久久久久网站| 国内精品久久久久久久亚洲| 久久综合九色综合精品| 久久久久人妻一区二区三区vr| 国产成人精品白浆久久69| 国内高清久久久久久| 99久久国产精品免费一区二区 | 一本色道久久88综合日韩精品 | 97久久天天综合色天天综合色hd| 国产激情久久久久影院| 女人香蕉久久**毛片精品| 久久免费视频观看| 国产成人综合久久精品尤物| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 亚洲狠狠久久综合一区77777| 久久精品免费大片国产大片| 99蜜桃臀久久久欧美精品网站 | 久久国产三级无码一区二区| 久久精品国产免费一区| 狠狠色综合久久久久尤物 | 久久精品夜色噜噜亚洲A∨| 久久免费视频1| 久久精品人妻一区二区三区| 亚洲人成伊人成综合网久久久|