• <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
            sourcemaking 上關(guān)于抽象工廠方法的例子代碼,個人感覺非常利于理解,看看這些代碼,比讀幾遍書貌似有效果的多~~~

             1 #include <iostream.h>
             2 
             3 class Shape {
             4   public:
             5     Shape() {
             6       id_ = total_++;
             7     }
             8     virtual void draw() = 0;
             9   protected:
            10     int id_;
            11     static int total_;
            12 };
            13 int Shape::total_ = 0;
            14 
            15 class Circle : public Shape {
            16   public:
            17     void draw() {
            18       cout << "circle " << id_ << ": draw" << endl;
            19     }
            20 };
            21 class Square : public Shape {
            22   public:
            23     void draw() {
            24       cout << "square " << id_ << ": draw" << endl;
            25     }
            26 };
            27 class Ellipse : public Shape {
            28   public:
            29     void draw() {
            30       cout << "ellipse " << id_ << ": draw" << endl;
            31     }
            32 };
            33 class Rectangle : public Shape {
            34   public:
            35     void draw() {
            36       cout << "rectangle " << id_ << ": draw" << endl;
            37     }
            38 };
            39 
            40 class Factory {
            41   public:
            42     virtual Shape* createCurvedInstance() = 0;
            43     virtual Shape* createStraightInstance() = 0;
            44 };
            45 
            46 class SimpleShapeFactory : public Factory {
            47   public:
            48     Shape* createCurvedInstance() {
            49       return new Circle;
            50     }
            51     Shape* createStraightInstance() {
            52       return new Square;
            53     }
            54 };
            55 class RobustShapeFactory : public Factory {
            56   public:
            57     Shape* createCurvedInstance()   {
            58       return new Ellipse;
            59     }
            60     Shape* createStraightInstance() {
            61       return new Rectangle;
            62     }
            63 };
            64 
            65 int main() {
            66 #ifdef SIMPLE
            67   Factory* factory = new SimpleShapeFactory;
            68 #elif ROBUST
            69   Factory* factory = new RobustShapeFactory;
            70 #endif
            71   Shape* shapes[3];
            72 
            73   shapes[0= factory->createCurvedInstance();   // shapes[0] = new Ellipse;
            74   shapes[1= factory->createStraightInstance(); // shapes[1] = new Rectangle;
            75   shapes[2= factory->createCurvedInstance();   // shapes[2] = new Ellipse;
            76 
            77   for (int i=0; i < 3; i++) {
            78     shapes[i]->draw();
            79   }
            80 }

            輸出為:

            ellipse 0: draw
            rectangle 
            1: draw
            ellipse 
            2: draw


            精品久久久久久成人AV| 国产精品丝袜久久久久久不卡| 国产99久久九九精品无码| 国产精品一久久香蕉国产线看观看| 国产婷婷成人久久Av免费高清| 亚洲国产精品久久久久婷婷老年| 久久婷婷人人澡人人| 男女久久久国产一区二区三区 | 99久久无码一区人妻a黑| 99久久精品免费看国产| 久久99热这里只有精品国产| www.久久热| 国内精品久久久久影院薰衣草| 久久精品国产亚洲网站| 中文字幕日本人妻久久久免费| 国产精品9999久久久久| 女人高潮久久久叫人喷水| 色综合久久天天综合| 久久天天躁狠狠躁夜夜网站| 久久精品国产99久久香蕉| 久久不射电影网| 久久精品亚洲AV久久久无码| 久久国产高清一区二区三区| segui久久国产精品| 久久精品无码一区二区无码| 久久人妻少妇嫩草AV无码专区| 午夜福利91久久福利| 少妇久久久久久被弄到高潮 | 久久久久99精品成人片| 久久被窝电影亚洲爽爽爽| 潮喷大喷水系列无码久久精品 | 久久人人爽人人爽人人片AV麻烦| 精品多毛少妇人妻AV免费久久| 久久狠狠色狠狠色综合| 久久久亚洲欧洲日产国码二区| 国产精品久久久久免费a∨| 伊人久久大香线蕉av不卡| 久久亚洲精品国产亚洲老地址 | 国产精品欧美久久久久天天影视| 国产精品久久99| 99久久婷婷国产综合精品草原|