设计模式之模块方法

定义

模板与方法应该是最常使用的设计模式,在GOF(设计模式)中的定义:定义一个操作中的算法的骨架 ,而将一些步骤延迟到子类中。 Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

要点

最常用的设计模式,子类可以复写父类子流程,使父类的骨架流程丰富;

反向控制流程的典型应用;

父类 protected 保护子类需要复写的子流程;这样子类的子流程只能父类来调用;

本质

通过固定算法骨架来约束子类的行为;

示例代码:

cpp 复制代码
//程序库开发人员
class Library{
public:
	//稳定 template method
    void Run(){
        
        Step1();

        if (Step2()) { //支持变化 ==> 虚函数的多态调用
            Step3(); 
        }

        for (int i = 0; i < 4; i++){
            Step4(); //支持变化 ==> 虚函数的多态调用
        }

        Step5();

    }
	virtual ~Library(){ }

protected:
	
	void Step1() { //稳定
        //.....
    }
	void Step3() {//稳定
        //.....
    }
	void Step5() { //稳定
		//.....
	}

	virtual bool Step2() = 0;//变化
    virtual void Step4() =0; //变化
};
cpp 复制代码
//应用程序开发人员
class Application : public Library {
protected:
	virtual bool Step2(){
		//... 子类重写实现
    }

    virtual void Step4() {
		//... 子类重写实现
    }
};




int main()
	{
	    Library* pLib=new Application();
	    lib->Run();

		delete pLib;
	}
}
相关推荐
计算机安禾9 分钟前
【c++面向对象编程】第12篇:继承(二):构造与析构顺序,继承中的构造函数
开发语言·c++
雪度娃娃33 分钟前
结构型设计模式——享元模式
c++·设计模式·享元模式
TIEM_6942 分钟前
C++string|遍历、模拟实现、赋值拷贝现代写法
开发语言·c++
计算机安禾1 小时前
【c++面向对象编程】第14篇:多态(一):虚函数——实现“一个接口,多种方法”
开发语言·c++
Hua-Jay1 小时前
OpenCV联合C++/Qt 学习笔记(十七)----凸包检测、直线检测及点集拟合
c++·笔记·qt·opencv·学习·计算机视觉
basketball6161 小时前
C++ Lambda 表达式完全指南
开发语言·c++·算法
不知名的老吴1 小时前
C++中emplace函数的不适场景总结(三)
开发语言·c++·算法
2401_892070981 小时前
C++ 缓存线程池(CachedThreadPool):原理、实现、对比
c++·缓存·缓存线程池
玉树临风ives1 小时前
atcoder ABC 457 题解
数据结构·c++·算法
小张成长计划..2 小时前
【C++】31:异常
c++