近期看了下B站《C++设计模式入门》,想谈谈对设计模式的理解
什么是设计模式
- 设计模式的目的在于提高代码复用率。通过良好的代码架构使得代码尽可能重用,同时尽量减少模块之间的耦合。在新增需求时,能尽可能少的侵入当前代码修改;
- 设计模式的应用场景是重构代码,服务于代码复用率,先完成,再完美;
- 设计模式的常用手段是继承改组合,通过组合可以更好的泛化对象职责。
印象深刻的设计模式
模板方法
- 举例
class Parent
{
public:
void Run() {
Step1();
if (Step2()) {
Step3();
}
}
virtual void Step1() = 0;
virtual bool Step2() = 0;
virtual void Step3() = 0;
};
- 理解
- 由基类定义好其成员含函数的调用顺序,子类只需重写其余成员函数,但调用顺序由基类控制;
- 如UI页面的加载顺序,页面的OnStart、OnSetupView的调用顺序在基类中实现。
策略模式
- 举例
class Strategy;
class SalesOrder {
private:
Strategy *strategy;
public:
SalesOrder(StrateyFactory *strategyFactory) {
this->strategy = strategyFactory->NewStrategy();
}
~SalesOrder() {
delete this->strategy;
}
double CalculateTax() {
Context context();
double val = strategy->Calculate(context);
}
};
- 理解
- 将行为对象化,通过实例化对象替换原有的
If-else; - 通过基类动态加载不同行为,可以固化整体的实现方案,新增子类策略不影响现有代码。