本周筆記分為兩個(gè)部分:一為課程重點(diǎn)筆記,二為關(guān)于作業(yè)的思考
第一部分:課程重點(diǎn)筆記
首先 什么是設(shè)計(jì)模式:

軟件設(shè)計(jì)的金科玉律:復(fù)用


以下整理了面向?qū)ο笤O(shè)計(jì)的幾大原則:
1、依賴(lài)倒置原則

2、開(kāi)放封閉原則

3、單一職責(zé)原則

4、替換原則

5、接口隔離原則

6、優(yōu)先使用對(duì)象組合原則

7、封裝變化點(diǎn)

8、針對(duì)接口編程

設(shè)計(jì)模式的分類(lèi):


對(duì)于代碼的重構(gòu),有以下幾種關(guān)鍵的技法:

一、template Method




二、Strategy




三、Observer觀(guān)察者模式




四、Bridge橋模式




第二部分:作業(yè)
本周作業(yè)題目如下:
考慮一個(gè)文件分割器的設(shè)計(jì)。MainForm為界面類(lèi),收集用戶(hù)輸入的文件路徑,和分割數(shù)量。FileSplitter為實(shí)現(xiàn)文件分割的類(lèi)型。其中Split( )實(shí)現(xiàn)文件分割算法。
1.要求為Split( )支持多種文件分割算法(至少3種),在MainForm中靈活切換多種算法。
2.在Split( )分割過(guò)程中,實(shí)現(xiàn)對(duì)進(jìn)度條的實(shí)時(shí)通知,即對(duì)progressBar的賦值。
3.使用松耦合面向?qū)ο笤O(shè)計(jì)方法和思想,無(wú)需編寫(xiě)具體算法實(shí)現(xiàn),可使用偽碼表示設(shè)計(jì)。
思考:
首先,作業(yè)要求支持多種文件分割算法,可以靈活切換。根據(jù)本周課程內(nèi)容,與所講的策略模式相符合。

其次,要求可以實(shí)現(xiàn)對(duì)進(jìn)度條的實(shí)時(shí)通知,對(duì)progressBar進(jìn)行賦值。與所講的觀(guān)察者模式貼合。
嗯,再?gòu)?fù)習(xí)一遍策略模式和觀(guān)察者模式吧....
策略模式詳解代碼如下:
···
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ì)了解了策略模式后,將策略模式與觀(guān)察者結(jié)合起來(lái)就可以完成本周作業(yè)
搞定!