青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 0,  comments - 5,  trackbacks - 0
簡單工廠模式
1.1 面試受挫
#include <iostream>

using namespace std;

int main(void)
{
    cout 
<< "請輸入數字" << endl;
    
int A = 0;
    cin 
>> A;

    cout 
<< "請輸入運算符號(+、-、*、/)" << endl;
    
char B = '+';
    cin 
>> B;
    
    cout 
<< "請輸入數字" << endl;
    
int C = 0;
    cin 
>> C;

    
int D = 0;

    
if ( B == '+' )
        D 
= A + C;
    
if ( B == '-' )
        D 
= A - C;
    
if ( B == '*' )
        D 
= A * C;
    
if ( B == '/' )
        D 
= A / C;

    cout 
<< "結果是" << D << endl;
    
return 0;
}


1.2 初學者的毛病
(
1) A,B,C,D的變量命名不規范
(
2) 判斷分支,意味著每個條件都要判斷,計算機額外做了三次判斷操作
(
3) 沒有判斷除0的條件
(
4) 沒有考慮到用戶輸入出錯的問題

1.3 規范代碼
#include <iostream>

using namespace std;

// exception constant
#define DIVID_ZERO_ERROR 0

// function return constant
#define OK 0
#define ERROR -1


//from input stream read a integer
int ReadInt ( char *tipMessage = "Input Error,you must enter an integer,please again:")
{
    
int readResult = 0;
    cin 
>> readResult;
    
while ( cin.fail() )
    {
        cout 
<< tipMessage << endl; //show the user a tip message

        cin.clear(); 
//reset the fail flag to zero
        cin.sync(); //clear the data of the input stream

        cin 
>> readResult;
    }
    
return readResult;
}

int main(void)
{
    
try
    {
        cout 
<< "Please enter an integer:" << endl;
        
int numberA = ReadInt ();
        
        cout 
<< "Please enter an operator(+、-、*、/)" << endl;
        
char arithOperator = '+';
        cin 
>> arithOperator;
        
        cout 
<< "Please enter an integer:" << endl;
        
int numberB = ReadInt ();
        
        
int result = 0;
        
        
switch ( arithOperator )
        {
        
case '+':
            result 
= numberA + numberB;
            
break;

        
case '-':
            result 
= numberA - numberB;
            
break;

        
case '*':
            result 
= numberA * numberB;
            
break;

        
case '/':
            
if ( numberB == 0 )
            {
                
throw (DIVID_ZERO_ERROR); 
            }
            
else
            {
                result 
= numberA / numberB;
            }
            
break;

        
default:
            
break;
        }
        
        
//out put the result
        cout << "The result is " << result << endl;
    }
    
catch ( int errorId)
    {
        
switch (errorId)
        {
            
case DIVID_ZERO_ERROR:
                cout 
<< "Dividing a zero is an error!" << endl;
                
break;

            
default:
                cout 
<< "unknown error id!";
        }
        
return ERROR;
    }
    
return OK;
}


1.4 面向對象編程
(
1)可維護
(
2)可復用
(
3)可擴展
(
4)靈活性好

1.6
通過封裝、繼承、多態把程序的耦合度降低,用設計模式使得程序更加的靈活,容易修改,并且易于復用。
1.7
小菜: 復制還是復用,這是個問題。
大鳥: 問題你個頭,當然是復用啦!
1.8
業務邏輯應該與界面邏輯分開,讓它們之間的耦合度降低。
分開才容易維護或者擴展。
#include <iostream>

using namespace std;

#define DIVIED_ZERO_ERROR 0
#define NO_DEFINED_OPERATOR 1

#define OK 0
#define ERROR -1

class ArithOperation
{
public:
    
static double GetResult (double numberA, double numberB, char arithOperator)
    {
        
double result = 0;
        
switch ( arithOperator)
        {
        
case '+':
            result 
= numberA + numberB;
            
break;
            
        
case '-':
            result 
= numberA - numberB;
            
break;
            
        
case '*':
            result 
= numberA * numberB;
            
break;
            
        
case '/':
            
if (numberB == 0)
                
throw (DIVIED_ZERO_ERROR);
            result 
= numberA / numberB;
            
break;
        
default:
            
throw ( NO_DEFINED_OPERATOR );
            
break;
        }
        
        
return result;
    }
};


double ReadDouble ( char * tipMessage = "Input Error!Please enter an double number again:")
{
    
double result = 0.0;
    cin 
>> result;
    
while (cin.fail())
    {
        cout 
<< tipMessage << endl;
        
        cin.clear();
        cin.sync();
        
        cin 
>> result;
    }
    
    
return result;
}

int main (void)
{
    
try
    {
        cout 
<< "Please Enter an dobule number:" << endl;
        
double numberA = ReadDouble ();
        
        cout 
<< "Please Enter an arithmetic operator:" << endl;
        
char arithOperator;
        cin 
>> arithOperator;
        
        cout 
<< "Please Enter an double number:" << endl;
        
double numberB = ReadDouble ();
        
        
double result = 0;
        result 
= ArithOperation::GetResult ( numberA, numberB, arithOperator );
        
        cout 
<< "The result is" << result << endl;
    }
    
catch ( int errorId )
    {
        
switch (errorId)
        {
        
case DIVIED_ZERO_ERROR:
            cout 
<< "Dividing zero is error." << endl;
            
break;

        
case NO_DEFINED_OPERATOR:
            cout 
<< "The opeartor is not defined." << endl;
            
break;
            
        
default:
            cout 
<< "unknow error!" << endl;
            
break;
        }
        
return ERROR;
    }
    
return OK;
}


1.9 緊耦合和松耦合
#include <iostream>

using namespace std;

#define DIVIED_ZERO_ERROR 0
#define OPERATION_TYPE_ERROR 1

#define OK 0
#define ERROR 1

class arithOperator
{
protected:
    
double numberA;
    
double numberB;
public:
    arithOperator()
    {
        numberA 
= 0;
        numberB 
= 0;
    }

    
void SetNumberA (double number)
    {
        numberA 
= number;
    }
    
double GetNumberA ()
    {
        
return numberA;
    }
    
void SetNumberB (double number)
    {
        numberB 
= number;
    }
    
double GetNumberB ()
    {
        
return numberB;
    }

    
virtual double GetResult ()
    {
        
double result = 0;
        
return result;
    }
};

class OpeartionAdd : public arithOperator
{
    
virtual double GetResult ()
    {
        
double result = 0;
        result 
= numberA + numberB;
        
return result;
    }
};

class OperationSub : public arithOperator
{
    
virtual double GetResult ()
    {
        
double result = 0;
        result 
= numberA - numberB;
        
return result;
    }
};

class OperationMul : public arithOperator
{
    
virtual double GetResult ()
    {
        
double result = 0;
        result 
= numberA * numberB;
        
return result;
    }
};

class OperationDiv : public arithOperator
{
    
virtual double GetResult ()
    {
        
if (numberB == 0)
        {
            
throw (DIVIED_ZERO_ERROR);
        }

        
double result = 0;
        result 
= numberA / numberB;

        
return result;
    }
};


double ReadDouble ( char * tipMessage = "Input error!Please enter an double number again:\n")
{
    
double result = 0;

    cin 
>> result;
    
while (cin.fail())
    {
        cout 
<< tipMessage << endl;
        cin.clear();
        cin.sync();
        cin 
>> result;
    }
    
return result;
}

class OperationFactory
{
public:
    
static arithOperator* createOperator( char operType)
    {
        arithOperator 
*operPointer = NULL;
        
switch (operType)
        {
        
case '+':
            operPointer 
= new OpeartionAdd();
            
break;

        
case '-':
            operPointer 
= new OperationSub();
            
break;

        
case '*':
            operPointer 
= new OperationMul();
            
break;

        
case '/':
            operPointer 
= new OperationDiv();
            
break;

        
default:
            
throw OPERATION_TYPE_ERROR;
            
break;
        }
        
return operPointer;
    }
};

int main (void)
{
    
try
    {
    
        cout 
<< "Please enter an double number:" << endl;
        
double numberA;
        numberA 
= ReadDouble();
        
        cout 
<< "Please enter an operator:" << endl;
        
char userOperator;
        cin 
>> userOperator;
        
        cout 
<< "Please enter an double number:" << endl;
        
double numberB;
        numberB 
= ReadDouble();

        arithOperator 
*operPointer;
        operPointer 
= OperationFactory::createOperator (userOperator);
        operPointer
->SetNumberA(numberA);
        operPointer
->SetNumberB(numberB);
        
        
double result = 0;
        result 
= operPointer->GetResult();

        cout 
<< "The result is " << result << endl;
        
        delete operPointer;

        
return OK;

    }
    
catch ( int errorId )
    {
        
switch (errorId)
        {
        
case DIVIED_ZERO_ERROR:
            cout 
<< "Diving zero is an error!" << endl;
            
break;

        
case OPERATION_TYPE_ERROR:
            cout 
<< "Operator type is error!" << endl;
            
break;

        
default:
            cout 
<< "Unknown error!" << endl;
            
break;
        }

        
return ERROR;
    }
    
}


總結:工廠只負責生產由用戶指定的產品,這樣的設計好處是每種產品獨立,如果程序需要修改其中某一個產品,那么他不需要改動其它產品的代碼,也不需要改動工廠的代碼,當然,界面代碼也不需要改動,改動的只是產品的內在。
如果要添加一種新的產品,則需添加新的類并修改工廠類。
注意:產品必須是同一種功能,也就是同樣的方法名稱。

C
++步驟:
1.定義抽象類,并定義一個虛擬的方法
2.從該抽象類派生出子類,實現同一個方法
3.定義工廠,提供函數,根據用戶的輸入,生產出不同的對象,注意,這里用的是NEW,所以用
4.利用這個對象進行操作
5.刪除對象
posted on 2010-09-15 16:19 saha 閱讀(187) 評論(0)  編輯 收藏 引用

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿

文章分類

文章檔案

收藏夾

搜索

  •  

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区精品电影| 久久精品视频播放| 欧美成va人片在线观看| 亚洲国产美女久久久久 | 欧美二区在线播放| 亚洲三级影片| 一区二区三区日韩在线观看 | 久久综合色婷婷| 亚洲伦理精品| 亚洲一区观看| 在线观看国产欧美| 99re66热这里只有精品3直播| 国产精品二区影院| 久久这里有精品15一区二区三区| 国产一区二区三区久久 | 国产精品免费福利| 免费不卡在线观看| 欧美日韩p片| 西西裸体人体做爰大胆久久久| 久久www成人_看片免费不卡| 最新国产拍偷乱拍精品| 在线亚洲免费视频| 极品日韩av| 一区二区三区欧美在线观看| 国模吧视频一区| 亚洲精品日韩综合观看成人91 | 久久一区二区精品| 亚洲一区日本| 免费亚洲电影在线| 校园春色国产精品| 欧美电影打屁股sp| 久久不射2019中文字幕| 欧美fxxxxxx另类| 亚洲一区二区三区四区视频| 亚洲大片精品永久免费| 国产精品a久久久久久| 亚洲欧美日韩一区二区在线 | 嫩草成人www欧美| 性色av一区二区三区红粉影视| 欧美xart系列高清| 久久久久久久一区二区| 欧美午夜剧场| 亚洲人成7777| 国产视频一区在线观看| 一本久久青青| 日韩午夜一区| 欧美不卡视频一区| 欧美成人在线免费观看| 国产视频精品xxxx| 亚洲欧洲精品成人久久奇米网| 一区二区三区黄色| 另类国产ts人妖高潮视频| 久久精品国产视频| 国产精品爱久久久久久久| 亚洲第一区中文99精品| 在线观看日韩一区| 久久青草久久| 美女精品在线观看| 国产一区二区精品在线观看| 日韩亚洲一区在线播放| 亚洲黑丝一区二区| 麻豆成人综合网| 久久综合婷婷| 亚洲缚视频在线观看| 久久亚洲一区二区| 欧美高清视频一区二区| 亚洲国产精品久久久久秋霞不卡 | 久久午夜电影网| 鲁鲁狠狠狠7777一区二区| 亚洲激情在线| 麻豆精品91| 亚洲第一级黄色片| 99国产精品国产精品久久| 免费久久99精品国产| 欧美激情四色| 亚洲破处大片| 欧美日韩日本网| 亚洲无线视频| 久久久国产一区二区| 国产一区二区在线观看免费播放| 欧美在线在线| 欧美成人69av| 正在播放亚洲一区| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲综合色视频| 麻豆精品在线播放| 亚洲毛片播放| 国产精品视频一区二区高潮| 久久精品国产亚洲aⅴ| 亚洲大胆在线| 亚洲欧美日韩在线高清直播| 国内精品久久久久影院色| 欧美ab在线视频| 亚洲一二三区在线| 蜜臀久久99精品久久久久久9| 99国产精品私拍| 日韩视频在线观看国产| 国产精品成人在线| 久久免费视频观看| 夜夜嗨av一区二区三区网页 | 国产一区久久| 欧美黄网免费在线观看| 亚洲午夜精品久久久久久app| 麻豆久久精品| 午夜一级久久| 夜夜嗨av一区二区三区网页| 国产伊人精品| 国产精品白丝av嫩草影院| 老**午夜毛片一区二区三区| 亚洲视频一起| 亚洲日本视频| 免费一级欧美在线大片| 欧美在线视频不卡| 中文有码久久| 亚洲精品在线三区| 激情综合网激情| 国产精品日韩欧美| 欧美三级日本三级少妇99| 免费不卡视频| 久久久一本精品99久久精品66| 亚洲综合色丁香婷婷六月图片| 亚洲激情六月丁香| 女人香蕉久久**毛片精品| 欧美一区二区三区日韩视频| 亚洲图片在线| 夜夜嗨av一区二区三区四区| 亚洲国产综合在线看不卡| 国产综合18久久久久久| 国产乱码精品一区二区三区av| 欧美日韩综合视频| 欧美日韩久久久久久| 欧美日韩国产另类不卡| 欧美精品久久久久久久免费观看| 免费久久99精品国产自| 欧美18av| 欧美精品一区二区三区在线看午夜| 久久免费精品日本久久中文字幕| 欧美在线观看视频在线| 欧美亚洲一区二区在线| 欧美一级淫片aaaaaaa视频| 午夜精品久久久久久久99樱桃 | 久久本道综合色狠狠五月| 先锋影音国产精品| 校园春色国产精品| 性感少妇一区| 久久久亚洲成人| 欧美电影资源| 欧美巨乳在线观看| 欧美日韩视频第一区| 欧美午夜免费影院| 国产精品一区二区久久久| 国产精品系列在线| 国产专区精品视频| 亚洲黄色小视频| 99成人免费视频| 亚洲欧美日韩精品久久久| 午夜在线一区| 欧美1区视频| 亚洲精品日日夜夜| 亚洲特色特黄| 久久久久国产成人精品亚洲午夜| 久久综合婷婷| 国产精品ⅴa在线观看h| 国产综合激情| 99在线视频精品| 欧美一区二区三区在| 浪潮色综合久久天堂| 亚洲欧洲日韩综合二区| 亚洲天堂黄色| 麻豆成人在线| 国产精品性做久久久久久| 尤物99国产成人精品视频| 日韩亚洲精品视频| 久久国产精品久久精品国产| 欧美激情第三页| 亚洲欧美成人一区二区三区| 久久婷婷影院| 国产精品免费看久久久香蕉| 永久免费精品影视网站| 亚洲一区精彩视频| 欧美大色视频| 香蕉成人伊视频在线观看| 免费视频一区| 国产综合欧美| 国产精品99久久久久久宅男| 久久综合婷婷| 亚洲欧美国产精品va在线观看 | 欧美视频在线看| 亚洲人久久久| 久久精品99国产精品| 日韩视频一区二区在线观看| 久久精品人人爽| 国产精品久久久久久久午夜| 91久久精品日日躁夜夜躁欧美| 午夜伦欧美伦电影理论片| 亚洲欧洲日产国产综合网| 久久只精品国产| 国内精品免费在线观看| 欧美一区亚洲一区| 一区二区三区高清视频在线观看 |