本周筆記分為兩個部分:一為課程重點筆記,二為關于作業的思考
第一部分:課程重點筆記
首先 什么是設計模式:
軟件設計的金科玉律:復用
以下整理了面向對象設計的幾大原則:
1、依賴倒置原則
2、開放封閉原則
3、單一職責原則
4、替換原則
5、接口隔離原則
6、優先使用對象組合原則
7、封裝變化點
8、針對接口編程
設計模式的分類:
對于代碼的重構,有以下幾種關鍵的技法:
一、template Method
二、Strategy
三、Observer觀察者模式
四、Bridge橋模式
第二部分:作業
本周作業題目如下:
考慮一個文件分割器的設計。MainForm為界面類,收集用戶輸入的文件路徑,和分割數量。FileSplitter為實現文件分割的類型。其中Split( )實現文件分割算法。
1.要求為Split( )支持多種文件分割算法(至少3種),在MainForm中靈活切換多種算法。
2.在Split( )分割過程中,實現對進度條的實時通知,即對progressBar的賦值。
3.使用松耦合面向對象設計方法和思想,無需編寫具體算法實現,可使用偽碼表示設計。
思考:
首先,作業要求支持多種文件分割算法,可以靈活切換。根據本周課程內容,與所講的策略模式相符合。
其次,要求可以實現對進度條的實時通知,對progressBar進行賦值。與所講的觀察者模式貼合。
嗯,再復習一遍策略模式和觀察者模式吧....
策略模式詳解代碼如下:
···
class TaxStrategy{
public:
virtual double Calculate(const Context& context)=0;
virtual ~TaxStrategy(){}
};
class CNTax : public TaxStrategy{
public:
virtual double Calculate(const Context& context){
//***********
}
};
class USTax : public TaxStrategy{
public:
virtual double Calculate(const Context& context){
//***********
}
};
class DETax : public TaxStrategy{
public:
virtual double Calculate(const Context& context){
//***********
}
};
//擴展
//*********************************
class FRTax : public TaxStrategy{
public:
virtual double Calculate(const Context& context){
//.........
}
};
class SalesOrder{
private:
TaxStrategy* strategy;
public:
SalesOrder(StrategyFactory* strategyFactory){
this->strategy = strategyFactory->NewStrategy();
}
~SalesOrder(){
delete this->strategy;
}
public double CalculateTax(){
//...
Context context();
double val =
strategy->Calculate(context); //多態調用
//...
}
};
···
在詳細了解了策略模式后,將策略模式與觀察者結合起來就可以完成本周作業
搞定!