《大話設計模式》之 第1章 代碼無錯就是優?——簡單原廠模式 小結

來源:互聯網
上載者:User

通過題目“使用物件導向程式設計語言實現一個控制台程式,要求輸入兩個數和運算子號,得到結果”

引出【物件導向編程】,指出三個重要特性

  1. 封裝
  2. 繼承
  3. 多態
指出了編程的要求:
  1. 可維護
  2. 可複用
  3. 可擴充
這裡小結一下設計的思路:按照題目要求,可以分為以下幾個步驟,
  • 輸入兩個數字
  • 輸入運算子號
  • 計算結果
  • 輸出結果
那這裡涉及到【邏輯部分】和【顯示部分】在【邏輯部分】中,我們考慮要建立類去計算,那麼這個類顯然應該是【運算類】Operation為什嗎?——如果需求要求增加一種運算叫做“fight”,也就是“x fight y”,那麼從物件導向的可擴充性考慮,這個時候,我們應該是簡單的增加一個與fight相關的類,從而完成這種擴充要求,而fight是一種運算,因而,顯然是需要增加一個fight運算類。於是可以推出,除了fight運算類之外,之前還有很多的運算類,因此,可以設計一個運算基類,這些具體運算類設計為運算基類的子類。從而獲得具體的運算基類和運算類如下:【運算類基類】
class Operator{public:Operator(void);virtual ~Operator(void);virtual double GetResult() const = 0;    public:    double _numberFirst = 0;    double _numberSecond = 0;};Operator::Operator(void){}Operator::~Operator(void){}

【加法運算類】

/*加法運算類*/class OperatorAdd : public Operator{public:OperatorAdd(void);virtual ~OperatorAdd(void);virtual double GetResult() const;};OperatorAdd::OperatorAdd(void){std::cout << "加法運算類建構函式" << std::endl;}OperatorAdd::~OperatorAdd(void){}double OperatorAdd::GetResult() const{    std::cout << "調用加法類的GetResult方法" << std::endl;    double result = _numberFirst + _numberSecond;return result;}
【減法運算類】
/*減法運算類*/class OperatorSub :public Operator{public:OperatorSub(void);virtual ~OperatorSub(void);virtual double GetResult() const;};OperatorSub::OperatorSub(void){std::cout << "減法運算類建構函式" << std::endl;}OperatorSub::~OperatorSub(void){}double OperatorSub::GetResult() const{std::cout << "調用減法類的GetResult方法" << std::endl;double result = _numberFirst - _numberSecond;return result;}

【簡單工廠類】針對輸入,返回對應的運算類

/* 工廠類 */#include <cassert>class OperatorFactory{public:OperatorFactory(void);~OperatorFactory(void);    public:    /* 靜態Factory 方法 */static Operator * CreateOperator(const std::string & model);};OperatorFactory::OperatorFactory(void){}OperatorFactory::~OperatorFactory(void){}Operator * OperatorFactory::CreateOperator(const std::string & model){if (model == "+"){return new OperatorAdd();}else if (model == "-"){return new OperatorSub();}else{assert(false);}return NULL;}
【main】
int main(int argc, const char * argv[]){Operator * ope = NULL;std::string modeName = "-";ope = OperatorFactory::CreateOperator(modeName);    ope->_numberFirst = 4;    ope->_numberSecond = 5;cout << ope->GetResult();    delete ope;ope = NULL;return 0;}

【輸出結果】

減法運算類建構函式

調用減法類的GetResult方法

-1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.