本周笔记分为两个部分:一为课程重点笔记,二为关于作业的思考
第一部分:课程重点笔记
首先 什么是设计模式:
软件设计的金科玉律:复用
以下整理了面向对象设计的几大原则:
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); //多态调用
//...
}
};
···
在详细了解了策略模式后,将策略模式与观察者结合起来就可以完成本周作业
搞定!