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

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)有考慮到用戶(hù)輸入出錯(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)由用戶(hù)指定的產(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)品,則需添加新的類(lèi)并修改工廠類(lèi)。
注意:產(chǎn)品必須是同一種功能,也就是同樣的方法名稱(chēng)。

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

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



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

常用鏈接

留言簿

文章分類(lèi)

文章檔案

收藏夾

搜索

  •  

最新評(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>
            亚洲精品精选| 欧美美女日韩| 亚洲国产欧美一区二区三区丁香婷| 国产精品成人aaaaa网站 | 麻豆九一精品爱看视频在线观看免费| 久久精品72免费观看| 亚洲国产精品毛片| 亚洲欧美bt| 狠狠狠色丁香婷婷综合久久五月| 国产精品男gay被猛男狂揉视频| 一区二区动漫| 亚洲欧美日韩系列| 在线观看日韩av电影| 久久五月激情| 日韩网站在线看片你懂的| 亚洲少妇一区| 在线视频国内自拍亚洲视频| 欧美日本久久| 久久精品一区二区| 欧美一区二区三区四区在线观看 | 午夜精品999| 亚洲一区制服诱惑| 欧美一区二区三区免费视| 亚洲国产一区在线| 日韩亚洲综合在线| 在线成人免费视频| 在线日韩日本国产亚洲| 国产精品久久久久久久久久三级| 久久综合999| 久久精品国产77777蜜臀| 久久国产毛片| 亚洲午夜精品久久久久久app| 亚洲高清中文字幕| 永久555www成人免费| 亚洲精品乱码久久久久| 国产在线播放一区二区三区| 欧美性大战久久久久久久蜜臀| 狼狼综合久久久久综合网| 亚洲自拍三区| 亚洲免费人成在线视频观看| 亚洲精品欧美激情| 性欧美精品高清| 免费在线亚洲| 午夜精品视频在线| 欧美色大人视频| 国产一区二区三区久久| 在线午夜精品自拍| 欧美黄色大片网站| 亚洲制服丝袜在线| 欧美婷婷六月丁香综合色| 欧美精品观看| 欧美一区二区高清| 亚洲欧美日韩中文在线制服| 激情成人综合网| 亚洲视频大全| 亚洲嫩草精品久久| 一本色道久久综合精品竹菊 | 国产自产女人91一区在线观看| 这里只有精品视频| 欧美一区免费视频| 欧美另类综合| 黄色一区二区在线| 亚洲男人第一av网站| 欧美精品久久久久久久| 国模精品一区二区三区| 久久er99精品| 亚洲一区视频在线| 国产主播在线一区| 亚洲黑丝在线| 欧美日韩精品系列| 久久国产欧美| 欧美伦理在线观看| 在线国产欧美| 一区二区冒白浆视频| 久久久精彩视频| 欧美一级在线亚洲天堂| 国产一区二区三区无遮挡| 美女黄毛**国产精品啪啪| 欧美日韩国产成人在线观看| 小嫩嫩精品导航| 亚洲欧美另类中文字幕| 国产婷婷成人久久av免费高清 | 久久精品盗摄| 亚洲一区二区久久| 免费成年人欧美视频| 裸体一区二区| 国产综合欧美| 欧美金8天国| 一区二区三区高清在线| 亚洲高清一区二区三区| 国产精品久久999| 欧美在线啊v| 欧美午夜一区| 亚洲国产美女精品久久久久∴| 亚洲黄色成人网| 欧美日韩国产综合新一区| 亚洲综合精品| 一区二区三欧美| 夜久久久久久| 在线播放亚洲一区| 亚洲精品在线观| 亚洲精品久久久久| 欧美国产精品va在线观看| 亚洲精品一区久久久久久| 久久爱91午夜羞羞| 欧美激情视频给我| 欧美在线你懂的| 欧美福利视频在线观看| 欧美mv日韩mv国产网站app| 国产日韩一区二区| 欧美大片在线观看一区| 亚洲欧美日韩一区二区在线| 欧美福利影院| 久久精品最新地址| 日韩亚洲视频| 欧美国产日韩视频| 一区二区三区日韩欧美精品| 免费在线播放第一区高清av| 性欧美暴力猛交另类hd| 日韩视频在线一区| 亚洲春色另类小说| 在线国产欧美| 另类人畜视频在线| 亚洲国产精品va在线看黑人动漫| 国内一区二区在线视频观看| 新片速递亚洲合集欧美合集 | 你懂的亚洲视频| 蜜臀av性久久久久蜜臀aⅴ| 亚洲成人资源网| 久久国产福利| 欧美在线免费视频| 亚洲午夜在线| 99re在线精品| 亚洲国产成人精品久久| 国产欧美日韩精品专区| 亚洲激情视频网站| 玖玖国产精品视频| 欧美激情国产高清| 欧美在线一区二区| 亚洲精品久久嫩草网站秘色 | 国产精品久久久爽爽爽麻豆色哟哟| 一道本一区二区| 免费精品视频| 六十路精品视频| 榴莲视频成人在线观看| 欧美激情免费在线| 午夜精品久久久久久久久久久久| 久久国产精品黑丝| 9人人澡人人爽人人精品| 一区二区三区你懂的| 午夜精品久久久久久久男人的天堂| 亚洲五月婷婷| 欧美激情1区2区3区| 亚洲激情社区| 在线亚洲免费| 亚洲欧美日韩一区二区在线 | 亚洲精品午夜精品| 亚洲一区国产| 亚洲视频福利| 毛片一区二区三区| 免费在线观看一区二区| 国产亚洲精久久久久久| 国产一级精品aaaaa看| 亚洲美女在线国产| 欧美激情一区二区三区成人| 久久久久综合| 亚洲精品视频免费在线观看| 国产亚洲免费的视频看| 精品成人在线视频| 亚洲精品日韩在线| 久久精品在线| 国内精品久久久久影院优| 这里只有精品在线播放| 亚洲国产老妈| 午夜精品在线观看| 激情懂色av一区av二区av| 欧美国产精品中文字幕| 亚洲国产精品成人一区二区| 一二三区精品福利视频| 免费人成精品欧美精品| 国产精品视频内| 1769国产精品| 久久精品女人天堂| 久久福利视频导航| 国产在线拍揄自揄视频不卡99| 欧美亚洲一区| 亚洲精品少妇30p| 亚洲第一精品电影| 久久久中精品2020中文| 看片网站欧美日韩| 亚洲人线精品午夜| 日韩一区二区免费看| 国产精品家庭影院| 亚洲欧美日韩直播| 亚洲欧美国产高清va在线播| 亚洲国产精品久久久久婷婷老年| 亚欧成人精品| 久久男女视频| 99视频国产精品免费观看| 欧美**人妖|