本周筆記分為兩個(gè)部分:一為課程重點(diǎn)筆記,二為關(guān)于作業(yè)的思考
第一部分:課程重點(diǎn)筆記
首先 什么是設(shè)計(jì)模式:
軟件設(shè)計(jì)的金科玉律:復(fù)用
以下整理了面向?qū)ο笤O(shè)計(jì)的幾大原則:
1严拒、依賴倒置原則
2、開放封閉原則
3、單一職責(zé)原則
4、替換原則
5珍坊、接口隔離原則
6、優(yōu)先使用對(duì)象組合原則
7正罢、封裝變化點(diǎn)
8垫蛆、針對(duì)接口編程
設(shè)計(jì)模式的分類:
對(duì)于代碼的重構(gòu),有以下幾種關(guān)鍵的技法:
一、template Method
二、Strategy
三末捣、Observer觀察者模式
四白胀、Bridge橋模式
第二部分:作業(yè)
本周作業(yè)題目如下:
考慮一個(gè)文件分割器的設(shè)計(jì)。MainForm為界面類,收集用戶輸入的文件路徑,和分割數(shù)量。FileSplitter為實(shí)現(xiàn)文件分割的類型疹味。其中Split( )實(shí)現(xiàn)文件分割算法。
1.要求為Split( )支持多種文件分割算法(至少3種),在MainForm中靈活切換多種算法帜篇。
2.在Split( )分割過程中糙捺,實(shí)現(xiàn)對(duì)進(jìn)度條的實(shí)時(shí)通知,即對(duì)progressBar的賦值笙隙。
3.使用松耦合面向?qū)ο笤O(shè)計(jì)方法和思想洪灯,無需編寫具體算法實(shí)現(xiàn),可使用偽碼表示設(shè)計(jì)竟痰。
思考:
首先签钩,作業(yè)要求支持多種文件分割算法,可以靈活切換坏快。根據(jù)本周課程內(nèi)容铅檩,與所講的策略模式相符合。
其次莽鸿,要求可以實(shí)現(xiàn)對(duì)進(jìn)度條的實(shí)時(shí)通知昧旨,對(duì)progressBar進(jìn)行賦值拾给。與所講的觀察者模式貼合。
嗯兔沃,再復(fù)習(xí)一遍策略模式和觀察者模式吧....
策略模式詳解代碼如下:
···
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){
//***********
}
};
//擴(kuò)展
//*********************************
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); //多態(tài)調(diào)用
//...
}
};
···
在詳細(xì)了解了策略模式后蒋得,將策略模式與觀察者結(jié)合起來就可以完成本周作業(yè)
搞定!