• <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>
            posts - 183,  comments - 10,  trackbacks - 0
            來自于《大話設(shè)計(jì)模式》
            如果需要添加其他操作,需要
            ·添加一個(gè)操作類
            ·修改 OperationFactory
            ·修改客戶代碼以使用這個(gè)操作

            UML 類圖如下:


            實(shí)例代碼 C++:
              1 #include <iostream>
              2 using namespace std;
              3 
              4 class Operation
              5 {
              6 protected:
              7     double _numberA;
              8     double _numberB;
              9 public:
             10     Operation(double a = 0.0double b = 0.0) : _numberA(a), _numberB(b) {}
             11     virtual ~Operation() {}
             12     virtual double GetResult()
             13     {
             14         double result = 0.0;
             15         return result;
             16     }
             17 };
             18 
             19 class OperationAdd : public Operation
             20 {
             21 public:
             22     OperationAdd(double a = 0.0double b = 0.0) : Operation(a, b) {}
             23     virtual double GetResult()
             24     {
             25         return _numberA + _numberB;
             26     }
             27 };
             28 
             29 class OperationSub : public Operation
             30 {
             31 public:
             32     OperationSub(double a = 0.0double b = 0.0) : Operation(a, b) {}
             33     virtual double GetResult()
             34     {
             35         return _numberA - _numberB;
             36     }
             37 };
             38 
             39 class OperationMul : public Operation
             40 {
             41 public:
             42     OperationMul(double a = 0.0double b = 0.0) : Operation(a, b) {}
             43     virtual double GetResult()
             44     {
             45         return _numberA * _numberB;
             46     }
             47 };
             48 
             49 class OperationDiv : public Operation
             50 {
             51 public:
             52     OperationDiv(double a = 0.0double b = 0.0) : Operation(a, b) {}
             53     virtual double GetResult()
             54     {
             55         if (_numberB == 0.0)
             56         {
             57             throw runtime_error("Denominator is 0!");
             58         }
             59         return _numberA / _numberB;
             60     }
             61 };
             62 
             63 class OperationFactory
             64 {
             65 public:
             66     static Operation* CreateOperation(char ope, double a = 0.0double b = 0.0)
             67     {
             68         Operation* ret = 0;
             69         switch (ope)
             70         {
             71         case '+':
             72             ret = new OperationAdd(a, b);
             73             break;
             74         case '-':
             75             ret = new OperationSub(a, b);
             76             break;
             77         case '*':
             78             ret = new OperationMul(a, b);
             79             break;
             80         case '/':
             81             ret = new OperationDiv(a, b);
             82             break;
             83         default:
             84             break;
             85         }
             86         return ret;
             87     }
             88 };
             89 
             90 int main()
             91 {
             92     try
             93     {
             94         Operation* p_ope;
             95         p_ope = OperationFactory::CreateOperation('+'3.05.0);
             96         if (p_ope != 0)
             97         {
             98             cout << p_ope->GetResult() << endl;
             99             delete p_ope;
            100             p_ope = 0;
            101         }
            102 
            103         p_ope = OperationFactory::CreateOperation('-'3.05.0);
            104         if (p_ope != 0)
            105         {
            106             cout << p_ope->GetResult() << endl;
            107             delete p_ope;
            108             p_ope = 0;
            109         }
            110 
            111         p_ope = OperationFactory::CreateOperation('*'3.05.0);
            112         if (p_ope != 0)
            113         {
            114             cout << p_ope->GetResult() << endl;
            115             delete p_ope;
            116             p_ope = 0;
            117         }
            118 
            119         p_ope = OperationFactory::CreateOperation('/'3.05.0);
            120         if (p_ope != 0)
            121         {
            122             cout << p_ope->GetResult() << endl;
            123             delete p_ope;
            124             p_ope = 0;
            125         }
            126 
            127         p_ope = OperationFactory::CreateOperation('/'3.00.0);
            128         if (p_ope != 0)
            129         {
            130             cout << p_ope->GetResult() << endl;
            131             delete p_ope;
            132             p_ope = 0;
            133         }
            134     }
            135     catch (const exception& e)
            136     {
            137         cerr << e.what() << endl;
            138     }
            139     return 0;
            140 }
            posted on 2011-04-21 14:19 unixfy 閱讀(232) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            蜜臀久久99精品久久久久久 | 99久久精品免费看国产一区二区三区| 亚洲色欲久久久综合网东京热| 亚洲精品无码久久久久去q| 国产精品久久久久久久久| 麻豆久久久9性大片| 久久久久久狠狠丁香| 亚洲欧洲久久久精品| 91久久精品视频| 久久久久亚洲AV无码专区体验| 国产精品永久久久久久久久久| 久久久久亚洲AV无码网站| 久久久噜噜噜久久中文字幕色伊伊| 色欲av伊人久久大香线蕉影院| 久久久久久国产精品无码下载| 久久久噜噜噜www成人网| 久久天天婷婷五月俺也去| 精品免费久久久久国产一区| 69久久夜色精品国产69| 一本久久知道综合久久| 中文字幕无码久久精品青草| 久久狠狠一本精品综合网| 国产精品久久久久久久久免费 | 久久久久人妻一区精品| 国产一久久香蕉国产线看观看 | 久久精品国产亚洲av麻豆色欲| 久久婷婷五月综合97色直播| 一本久久a久久精品综合夜夜 | 久久久久久青草大香综合精品| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 国产69精品久久久久APP下载 | 久久99中文字幕久久| 久久久老熟女一区二区三区| 久久亚洲私人国产精品vA| 国产成人久久精品一区二区三区| 人妻无码αv中文字幕久久琪琪布| 久久精品国产精品亚洲下载| 日韩美女18网站久久精品| 思思久久好好热精品国产 | 色综合久久天天综合| 久久精品无码一区二区三区免费 |