簡單工程模式(c++描述)

來源:互聯網
上載者:User

    最近才開始看設計模式,想想這玩意本來應該在大學的時候就應該瞭解的東西,到現在了竟然只瞭解到皮毛,慚愧啊~~~

  

    話說這是從一個計算機的案例來引發的思考,現在我想做一個計算機,包含加減乘除運算;

  

    考慮下,設計這個類,一般的設想是直接設計一個運算類,裡麵包含加減乘除運算的介面,然後就可以完工了。

 

    可是,真的是這樣嗎?如果我們想再增加一個乘方運算,怎麼辦呢?直接在運算類裡面寫?這顯然違背了設計的開閉原則。而且,再想一

 

想,這樣設計的類,耦合度想到高,如果要更改某一個運算方式,就必須再次開啟運算類,這樣做,估計老闆要發怒的了。

 

   於是,我們考慮一種簡單工程模式,把具體的類和實現部分分開,結構圖如下:

 

  這樣做,如果我們要增加新的運算,只需要增加新的運算類,然後才工廠中註冊新的產品就可以了;

 

代碼實現:

//運算基類
#include <iostream>

#ifndef OPERATION
#define OPERATION

class Operation
{
public:
    virtual double GetResult(double numA, double numB);
  
protected:

private:
};

#endif

 

#include "Operation.h"
//加法類
#ifndef OPERATIONADD
#define OPERATIONADD

class OperationAdd:public Operation
{
public :    

         double GetResult(double numA, double numB);

protected:

private:

};

#endif

 

//工廠

#ifndef SIMPLEFACTORY
#define SIMPLEFACTORY

class SimpleFactory
{
public:Operation *CreatOperation(char operate);

};

#endif

 

//工廠的實現

Operation *SimpleFactory::CreatOperation(char operate)
{
 Operation *oper = NULL; 
 switch (operate)
 {
 case '+':oper = new OperationAdd;
  break;
 case '-':oper = new OperationSub;
  break;
 case '*':oper = new OperationMul;
  break;
 case '/':oper = new OperationDiv;
  break; 
 default:oper = new OperationAdd;
  break;
 } 
 return oper;

}

 

用戶端

int main(void)
{
 double numA = 20;
 double numB = 13;

 Operation *oper = NULL;
 SimpleFactory simFac;

 oper = simFac.CreatOperation('/');

 double result = oper->GetResult(numA, numB);

 std::cout<<"numA / numB 's result is:"<<result<<std::endl;

 system("pause");

 return 0;
}

 

說明:

/*
*優點:符合物件導向4大原則:可維護,可複用,可擴充,靈活性高,耦合度低
*缺點:如果要增加新的產品,必須對工廠進行修改,這違背了軟體設計的開閉原則    
*/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.