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

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>
            夜夜爽夜夜爽精品视频| 国产午夜精品一区二区三区视频| 国产婷婷色一区二区三区| 久久美女艺术照精彩视频福利播放| 久久久久久网址| 亚洲图片在区色| 久久成人18免费观看| 日韩亚洲精品视频| 午夜精品久久久久久久久| 亚洲国产欧美另类丝袜| 久久久精品国产免费观看同学| 另类尿喷潮videofree| 六十路精品视频| 欧美在线免费观看| 欧美精品www在线观看| 久久午夜色播影院免费高清| 国产精品久久久久9999| 欧美高清不卡| 国产乱码精品| 99在线精品视频| 亚洲国产成人91精品| 午夜精品国产| 亚洲免费视频成人| 欧美精品一线| 欧美高清在线一区| 黄色精品免费| 性欧美长视频| 小处雏高清一区二区三区| 欧美日韩国产色综合一二三四| 欧美国产91| 国产精品一国产精品k频道56| 亚洲精品乱码久久久久久蜜桃麻豆| 国产日韩专区| 午夜精品久久久久久久99水蜜桃 | 亚洲精品看片| 亚洲国产中文字幕在线观看| 久久国产精品99国产| 久久国产精品久久w女人spa| 欧美午夜电影在线| 亚洲美女91| 国产精品99久久久久久久vr| 欧美激情一二区| 亚洲人成人一区二区三区| 亚洲精选在线| 欧美激情一区二区三区不卡| 欧美激情一区二区三区蜜桃视频 | 亚洲免费一在线| 亚洲男人的天堂在线| 欧美日韩综合视频| 一区二区三区波多野结衣在线观看| 日韩午夜电影| 欧美日韩精品欧美日韩精品一 | 亚洲激情中文1区| 久热精品视频在线免费观看| 欧美大片免费观看在线观看网站推荐| 国内精品嫩模av私拍在线观看 | 亚洲女性裸体视频| 国产精品美腿一区在线看| 亚洲调教视频在线观看| 欧美一级视频精品观看| 国产视频精品免费播放| 久久精品中文字幕免费mv| 免费成人黄色片| 亚洲日韩视频| 欧美午夜一区| 性欧美大战久久久久久久免费观看 | 欧美成人精品在线观看| 国产在线观看精品一区二区三区| 亚洲欧美综合v| 久热精品视频在线| 在线观看日韩av先锋影音电影院| 看片网站欧美日韩| 91久久久精品| 国产精品99久久99久久久二8| 国产精品无码永久免费888| 亚洲免费视频一区二区| 免费看成人av| 亚洲伊人伊色伊影伊综合网| 国产亚洲欧美aaaa| 另类尿喷潮videofree| 亚洲国产小视频| 亚洲男人的天堂在线| 国产永久精品大片wwwapp| 猛干欧美女孩| 亚洲一区二区av电影| 美女视频黄免费的久久| 一本色道88久久加勒比精品| 国产精品乱人伦一区二区| 久久精品天堂| 在线午夜精品| 欧美二区乱c少妇| 性视频1819p久久| 亚洲黄色成人久久久| 国产精品狼人久久影院观看方式| 久久久久欧美| 亚洲午夜在线| 亚洲国内欧美| 久久久久久久久久看片| 一本久久知道综合久久| 狠狠色狠狠色综合日日91app| 欧美日韩少妇| 久久综合九色欧美综合狠狠| 99一区二区| 欧美大片一区二区| 欧美一区日韩一区| 日韩一级成人av| 1000部国产精品成人观看| 国产精品ⅴa在线观看h| 欧美高清视频在线播放| 久久国产一二区| 亚洲女人天堂成人av在线| 亚洲激情小视频| 乱中年女人伦av一区二区| 亚洲欧美视频在线| 日韩一级大片在线| 久久裸体视频| 亚洲欧美成人在线| 夜夜嗨av一区二区三区| 亚洲国产天堂久久综合网| 欧美jizz19性欧美| 久久久久久久久久看片| 欧美亚洲一区二区三区| 亚洲网站在线| 国产精品99久久久久久宅男| 亚洲免费av片| 在线免费观看日本欧美| 国产一区二区三区在线观看免费视频| 国产精品国产三级国产普通话三级| 欧美激情一区二区| 欧美国产一区在线| 欧美大片免费观看| 欧美a级一区二区| 欧美不卡一区| 欧美激情免费观看| 欧美日韩999| 久久综合九九| 亚洲人人精品| 亚洲精品在线视频| 亚洲美女少妇无套啪啪呻吟| 亚洲精品久久久久久久久久久久久 | 亚洲狼人综合| 在线精品国产欧美| 永久免费毛片在线播放不卡| 黄色成人av网站| 黄色小说综合网站| 玉米视频成人免费看| 亚洲高清不卡一区| 亚洲二区三区四区| 一区在线影院| 亚洲国产高清视频| 亚洲欧洲一二三| 日韩香蕉视频| 亚洲一区二区成人| 午夜精品久久久久久久99水蜜桃 | 欧美男人的天堂| 欧美日韩一区二区三区免费| 欧美亚洲成人免费| 国产农村妇女精品一区二区| 国产香蕉97碰碰久久人人| 国内成人精品视频| 亚洲国产欧美一区| 一区二区三区精品久久久| 亚洲欧美日韩系列| 久久久久久自在自线| 欧美a级在线| 日韩午夜av电影| 亚洲一区免费看| 久久午夜精品| 国产精品扒开腿做爽爽爽视频| 国产午夜亚洲精品羞羞网站| 亚洲激情成人网| 午夜精品三级视频福利| 久久综合久久88| 日韩亚洲精品在线| 久久精品国产91精品亚洲| 欧美激情精品久久久久久免费印度| 国产精品高潮在线| 曰本成人黄色| 亚洲一区欧美二区| 久久一区二区视频| 亚洲精品一区在线观看| 欧美一区二区三区免费在线看| 美女国产一区| 国产精品乱人伦一区二区 | 亚洲欧美日韩国产一区二区三区| 久久婷婷亚洲| 国产精品你懂的| 亚洲精品一品区二品区三品区| 欧美一区二区| 亚洲精品综合在线| 久久精品一区中文字幕| 欧美色欧美亚洲另类二区| 亚洲大胆美女视频| 亚洲欧美在线网| 亚洲精品欧美专区| 久久久久久久久久久一区| 欧美午夜精品久久久久久孕妇| 亚洲国产精品123| 久久精品五月| 一区二区三区福利|