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

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

using namespace std;

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

    cout 
<< "請(qǐng)輸入運(yùn)算符號(hào)(+、-、*、/)" << endl;
    
char B = '+';
    cin 
>> B;
    
    cout 
<< "請(qǐng)輸入數(shù)字" << 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 
<< "結(jié)果是" << D << endl;
    
return 0;
}


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

1.3 規(guī)范代碼
#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 面向?qū)ο缶幊?br>(1)可維護(hù)
(
2)可復(fù)用
(
3)可擴(kuò)展
(
4)靈活性好

1.6
通過(guò)封裝、繼承、多態(tài)把程序的耦合度降低,用設(shè)計(jì)模式使得程序更加的靈活,容易修改,并且易于復(fù)用。
1.7
小菜: 復(fù)制還是復(fù)用,這是個(gè)問(wèn)題。
大鳥(niǎo): 問(wèn)題你個(gè)頭,當(dāng)然是復(fù)用啦!
1.8
業(yè)務(wù)邏輯應(yīng)該與界面邏輯分開(kāi),讓它們之間的耦合度降低。
分開(kāi)才容易維護(hù)或者擴(kuò)展。
#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;
    }
    
}


總結(jié):工廠只負(fù)責(zé)生產(chǎn)由用戶指定的產(chǎn)品,這樣的設(shè)計(jì)好處是每種產(chǎn)品獨(dú)立,如果程序需要修改其中某一個(gè)產(chǎn)品,那么他不需要改動(dòng)其它產(chǎn)品的代碼,也不需要改動(dòng)工廠的代碼,當(dāng)然,界面代碼也不需要改動(dòng),改動(dòng)的只是產(chǎn)品的內(nèi)在。
如果要添加一種新的產(chǎn)品,則需添加新的類并修改工廠類。
注意:產(chǎn)品必須是同一種功能,也就是同樣的方法名稱。

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

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



<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿

文章分類

文章檔案

收藏夾

搜索

  •  

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品女人| 久久99伊人| 国外成人在线视频网站| 欧美精品日韩三级| 久久国产精品一区二区三区| 亚洲精品在线二区| 免费一区二区三区| 欧美在线影院| 亚洲一区免费视频| 亚洲欧洲在线免费| 国产亚洲va综合人人澡精品| 欧美日韩免费高清| 麻豆精品在线观看| 久久精品欧洲| 欧美在线视频日韩| 亚洲欧美区自拍先锋| 亚洲乱码日产精品bd| 亚洲大片av| 欧美成人视屏| 欧美a级片网| 久久中文字幕导航| 欧美在线一二三| 欧美亚洲综合久久| 亚洲欧美日韩综合aⅴ视频| 一区二区免费在线播放| 亚洲精选在线| 亚洲精品乱码| 日韩一级免费| 日韩视频精品在线| 亚洲人体1000| 亚洲精品永久免费精品| 亚洲黄一区二区| 亚洲三级视频| 亚洲免费播放| 99精品热6080yy久久| 夜夜精品视频一区二区| 日韩一区二区免费高清| 99精品国产在热久久下载| 夜夜嗨av一区二区三区网站四季av| 亚洲精品国产精品乱码不99| 亚洲激情不卡| 一本久久a久久免费精品不卡| 一区二区免费在线视频| 亚洲网站视频福利| 午夜精彩视频在线观看不卡| 亚洲免费在线观看视频| 亚洲欧美制服中文字幕| 亚洲主播在线观看| 欧美影院一区| 久久久夜夜夜| 欧美韩日一区二区三区| 亚洲高清视频一区| 亚洲美女在线视频| 亚洲一区二区免费| 久久精品国产亚洲一区二区三区 | 一区二区在线视频观看| 亚洲丰满在线| 99精品国产热久久91蜜凸| 亚洲在线成人| 久久久青草婷婷精品综合日韩 | 亚洲一级在线| 欧美专区18| 欧美激情精品久久久| 欧美日韩在线播放三区四区| 国产精品美女www爽爽爽| 国产欧美欧美| 亚洲黄色影片| 性欧美8khd高清极品| 蜜臀91精品一区二区三区| 亚洲国产精品成人综合| 99天天综合性| 久久精品国产精品亚洲| 欧美激情精品久久久久久久变态| 国产精品久久| 有坂深雪在线一区| 在线视频日韩| 久久久久久久精| 亚洲精品一区二区三区福利| 亚洲影院污污.| 久久一区二区视频| 国产精品红桃| 亚洲国产精品一区二区久 | 久久aⅴ乱码一区二区三区| 美日韩精品免费观看视频| 欧美午夜精品久久久久久人妖| 国产曰批免费观看久久久| 99国产精品一区| 久久久久综合| 在线亚洲高清视频| 蜜臀91精品一区二区三区| 国产精品日韩一区二区三区| 18成人免费观看视频| 亚洲欧美精品伊人久久| 亚洲国产精品一区| 欧美一级视频免费在线观看| 欧美日韩亚洲一区二区三区| 在线观看一区二区精品视频| 亚洲免费视频网站| 亚洲福利国产| 欧美在线91| 国产精品a级| 亚洲免费高清| 欧美电影免费观看| 欧美亚洲视频在线观看| 欧美午夜一区二区福利视频| 亚洲国产午夜| 久久综合九色综合久99| 亚洲私人黄色宅男| 欧美精品网站| 亚洲精品国产精品久久清纯直播 | 日韩亚洲欧美在线观看| 噜噜噜久久亚洲精品国产品小说| 亚洲一区二区三区在线播放| 欧美精品一区在线观看| 亚洲激情精品| 欧美aa在线视频| 久久国产欧美| 国产色综合网| 欧美一级专区免费大片| 99成人在线| 欧美日韩色综合| 艳女tv在线观看国产一区| 欧美成人一区在线| 裸体女人亚洲精品一区| 伊人久久亚洲影院| 老司机一区二区三区| 欧美与黑人午夜性猛交久久久| 国产欧美日韩视频一区二区三区| 亚洲一区三区视频在线观看| 一本久久综合亚洲鲁鲁五月天| 欧美精品一二三| 一本一本久久a久久精品综合麻豆| 亚洲国产精品一区| 欧美激情影院| 一区二区三区精品| 日韩视频一区二区| 欧美性片在线观看| 亚洲欧美日韩综合一区| 亚洲性图久久| 国产视频欧美视频| 久久天天躁狠狠躁夜夜爽蜜月 | 亚洲国产精品免费| 欧美国产一区在线| 欧美激情一区二区三区四区| 99热这里只有精品8| 亚洲精品久久久久久久久久久久| 欧美国内亚洲| 亚洲中字在线| 欧美亚洲在线| 亚洲国产另类久久精品| 亚洲黄色三级| 国产精品乱子久久久久| 欧美中文字幕| 久久久久久网站| 亚洲欧洲精品一区二区三区不卡| 亚洲国内欧美| 欧美视频精品在线| 欧美在线亚洲综合一区| 久久人人97超碰国产公开结果| 亚洲人精品午夜| 亚洲午夜精品一区二区| 国产欧美一区二区精品婷婷 | 欧美国产日韩一区二区三区| 一区二区三区鲁丝不卡| 亚洲午夜一区二区| 狠狠色狠狠色综合人人| 欧美va天堂va视频va在线| 欧美激情在线| 欧美中文字幕在线| 久久免费黄色| 中国日韩欧美久久久久久久久| 亚洲欧美影音先锋| 亚洲国产高清aⅴ视频| 亚洲精品久久久久久一区二区| 国产精品男女猛烈高潮激情| 免费观看成人www动漫视频| 欧美日本一区| 久久久亚洲精品一区二区三区| 欧美精品18+| 久久久久久九九九九| 欧美国产日韩一区二区在线观看| 午夜日韩在线观看| 免费观看在线综合| 欧美一区1区三区3区公司| 欧美岛国激情| 欧美在线精品一区| 欧美激情久久久| 久久九九国产精品| 欧美日韩精品一区二区天天拍小说 | 一区二区国产日产| 久久久国产精品一区二区中文| 中文精品在线| 另类亚洲自拍| 久久精品一区二区| 欧美视频成人| 亚洲黄一区二区| 一区精品在线播放| 亚洲欧美www| 一区二区三区久久精品| 另类激情亚洲|